linux - 如何在 bash 脚本中读取文件时删除 1 个或多个匹配行
问题描述
我想使用 bash 脚本读取文件并删除与我的特定场景匹配的行(以“z”开头的行)。如果“inputFile”仅包含字母字符,我的代码可以正常工作。但是,如果一行带有“sed 的特定字符”(例如:z-2.10.3.2 x/y/z F (&)[]+* 行),那么我得到一个错误,(错误:sed:-e 表达式# 1,字符 29:未终止的 'y' 命令)。
#!/bin/bash
inputFile="test.txt"
while IFS= read -r line
do
echo "$line"
if [[ $line == z* ]];
then
sed -i "/$line/d" $inputFile
fi
done < "$inputFile"
我想删除 'z-2.10.3.2 x/y/z F (&)[]+*' 之类的行,我该怎么做...?
解决方案
正如您提到的,您不需要具有z*
只需使用grep -v
grep -vE "^[[:blank:]]*z" file
我创建了一个场景,其中我有一个文件,其中包含
root@ubuntu:~/T/e/s/t# cat file
hello world
sample line 1
sample line 2 world
sample line 3
sample line 4
就我而言,我想删除包含“世界”的行
root@ubuntu:~/T/e/s/t# grep -v "world" file
sample line 1
sample line 3
sample line 4
如果需要,可以将输出重定向到另一个文件中。
推荐阅读
- c - c - 链表中的指针问题
- google-bigquery - 连接谓词中的表不受支持的子查询
- mysql - 计数最多捐赠者 SQL
- node.js - 为什么我在 Express 上设置 CORS 时出现飞行前错误?
- angular - Angular 7/Ionic 4 - 背景图像 url 路径问题
- angular - 离子无法连接到服务器
- spectral-density - 转换功率谱密度的维度
- html - 将 100vh 高度页面中的元素向上滚动并移出视图
- artifactory - 是否可以自动设置 Artifactory 属性?
- spring-boot - 在 SpringBoot 中使用 Jaeger 将请求标头转发到下一个微服务