Dhr*_*uuv 2 sed awk text-processing
我有一个包含字符串和数字的 CSV 文件(比如 temp.csv)。我需要删除文件中行开头包含特定字符串模式的行。例如,这是我的文件 -
req1,incl_patt1,excl_patt1,2,ind1
req1,incl_patt2,excl_patt2,1,ind1
req1,incl_patt3,excl_patt3,4,ind1
req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4
Run Code Online (Sandbox Code Playgroud)
我req_file_curr在命令中
写一个模式~ $ req_file_curr=req1
echo "${req_file_curr}" 给出输出为 req1
但是,在sed命令中使用它时,如下所示:
sed '/\"${req_file_curr}\"/d' temp.csv
Run Code Online (Sandbox Code Playgroud)
给出输出为
req1,incl_patt1,excl_patt1,2,ind1
req1,incl_patt2,excl_patt2,1,ind1
req1,incl_patt3,excl_patt3,4,ind1
req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4
Run Code Online (Sandbox Code Playgroud)
我期待输出为
req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4
Run Code Online (Sandbox Code Playgroud)
如何使用 shell 中的变量作为模式来查找 insed或awk?
您需要将sed模式用双引号括起来,以便 shell 可以在将变量传递给之前展开变量sed:
sed "/^${req_file}/d" temp.csv
Run Code Online (Sandbox Code Playgroud)
您还需要使用^锚点来表明sed该模式需要出现在行首。
不需要awk或sed在这里:
grep -v "^$req_file_curr," file
Run Code Online (Sandbox Code Playgroud)
请注意(例如 forsed或awk尽管在较小程度上),它假定$req_file_curr不包含正则表达式运算符(例如.,*...)。
如果是这样,您必须转义这些字符,或者使用awk,您可以使用使用其index()功能的方法:
S="$req_file_curr," awk 'index($0, ENVIRON["S"]) != 1' < file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17798 次 |
| 最近记录: |