我需要从文件中删除特定的精确字符串。这被用作我正在实施的清理过程的一部分。问题是,有些变体与我想要删除的特殊 exact 字符串相似,但不完全相同。
例如,这是文件“sample”的示例:
tmp2
tmp3
tmp0
tmp1
tmp3
tmp3
tmp3
tmp1.1
tmp3
tmp2
tmp3
tmp1.2
tmp4
我只想删除“tmp1”,而不是“tmp1.1”或“tmp1.2”。
我正在使用单行 Perl 命令:
perl -i -nle 'print if !/tmp1/' ./sample
显然,单行脚本并不流畅。当然,它会删除“tmp1”,但是,它也会删除“tmp1.1”和“tmp1.2”。
有什么想法吗?
使用锚点。
^
表示行首,$
表示行尾。
$ perl -i -nle 'print if !/^tmp1$/' ./sample
在每个 Unix 机器上的任何 shell 中使用任何 awk,以下是全行字符串比较:
$ awk '$0 != "tmp1"' sample
tmp2
tmp3
tmp0
tmp3
tmp3
tmp3
tmp1.1
tmp3
tmp2
tmp3
tmp1.2
tmp4
或使用变量:
$ awk -v str='tmp1' '$0 != str' sample
tmp2
tmp3
tmp0
tmp3
tmp3
tmp3
tmp1.1
tmp3
tmp2
tmp3
tmp1.2
tmp4