我有一个文件,我想删除与整个字符串匹配的行,使用sed。我的文件test.txt的内容
test.pwd=test@123 test.pwd.path=/tmp/test test.pwd1.sample=123
字符串我尝试使用下面的sed命令,但它删除了与该模式匹配的行
sed -i "s/test.pwd/d" test.txt
型不是只删除第1行而是删除前两行
6uxekuva1#
如果非sed的答案是OK,那么perl将在=上分割行,并测试第一部分是否不等(避免正则表达式)
=
pattern='test.pwd' perl -F= -slane 'print if $F[0] ne $patt' -- -patt="$pattern" test.txt
字符串如果输出看起来像你想要的,添加-i:perl -i -F= ...个
-i
perl -i -F= ...
1szpjjfi2#
记住你使用的是正则表达式元字符。sed -i "s/test.pwd/d" test.txt表示“删除任何包含test的行,然后 * 任何单个字符 *,然后pwd”。在你的文件里,所有你显示的行都匹配。引用.,并添加一些不符合条件的行。作为Paul Pazderski在他的第一个评论中建议,添加=可以做到这一点,尽管更具体更好。sed -i 's/^test[.]pwd=/d' test.txt只会从您的示例中删除预期的行。如果把你的模式放在一个变量中,要小心引号和需要反斜杠的元字符,但是对于这个例子来说,它看起来很简单。
test
pwd
.
sed -i 's/^test[.]pwd=/d' test.txt
$: cat file safe-line=seeMe test.pwd=test@123 test-pwd=keepMe test.pwd.path=/tmp/test test.pwd1.sample=123 $: pat="test.pwd" # loses most lines $: sed "/$pat/d" file safe-line=seeMe $: pat="test.pwd=" # still loses test-pwd $: sed "/$pat/d" file safe-line=seeMe test.pwd.path=/tmp/test test.pwd1.sample=123 $: pat=^test\.pwd= # unquoted string, literal dot - still loses test-pwd $: sed "/$pat/d" file safe-line=seeMe test.pwd.path=/tmp/test test.pwd1.sample=123 $: pat="^test\.pwd=" # works, but some may wonder - why not \\ ? $: sed "/$pat/d" file safe-line=seeMe test-pwd=keepMe test.pwd.path=/tmp/test test.pwd1.sample=123 $: pat="^test[.]pwd=" # works, and clear $: sed "/$pat/d" file safe-line=seeMe test-pwd=keepMe test.pwd.path=/tmp/test test.pwd1.sample=123
字符串
2条答案
按热度按时间6uxekuva1#
如果非sed的答案是OK,那么perl将在
=
上分割行,并测试第一部分是否不等(避免正则表达式)字符串
如果输出看起来像你想要的,添加
-i
:perl -i -F= ...
个1szpjjfi2#
记住你使用的是正则表达式元字符。
sed -i "s/test.pwd/d" test.txt
表示“删除任何包含test
的行,然后 * 任何单个字符 *,然后pwd
”。在你的文件里,所有你显示的行都匹配。引用
.
,并添加一些不符合条件的行。作为Paul Pazderski在他的第一个评论中建议,添加
=
可以做到这一点,尽管更具体更好。sed -i 's/^test[.]pwd=/d' test.txt
只会从您的示例中删除预期的行。如果把你的模式放在一个变量中,要小心引号和需要反斜杠的元字符,但是对于这个例子来说,它看起来很简单。
字符串