想要精确匹配字符串,尽管有变体,并且仅删除该字符串

问题描述 投票:0回答:2

我需要从文件中删除特定的精确字符串。这被用作我正在实施的清理过程的一部分。问题是,有些变体与我想要删除的特殊 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”。

有什么想法吗?

string perl sed
2个回答
2
投票

使用锚点。

^
表示行首,
$
表示行尾。

$ perl -i -nle 'print if !/^tmp1$/' ./sample

0
投票

在每个 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
© www.soinside.com 2019 - 2024. All rights reserved.