Linux 删除文本文件中包含特定字符串的行/
我有一个文本文件,日期如下:2019年8月27日 我想删除所有行,但包含2019年8月27日的行除外 如果我使用sed,那将是:Linux 删除文本文件中包含特定字符串的行/,linux,bash,text,sed,Linux,Bash,Text,Sed,我有一个文本文件,日期如下:2019年8月27日 我想删除所有行,但包含2019年8月27日的行除外 如果我使用sed,那将是: sed -i '/pattern/!d' file.txt 问题是,当我有一个带有“/”的模式时,我有下一个错误: sed: -e expression #1, char 5: unknown command: `8' 避开斜线: sed -i '/27\/8\/2019/!d' file.txt 避开斜线: sed -i '/27\/8\/2019/!d' f
sed -i '/pattern/!d' file.txt
问题是,当我有一个带有“/”的模式时,我有下一个错误:
sed: -e expression #1, char 5: unknown command: `8'
避开斜线:
sed -i '/27\/8\/2019/!d' file.txt
避开斜线:
sed -i '/27\/8\/2019/!d' file.txt
使用awk
awk '/27\/8\/2019/' file.txt
awk '-your code-' file.txt > tmp && mv tmp file.txt
如果日期只是一个示例,请使用此选项保留所有日期行:
awk '/[0-9]+\/[0-9]+\/[0-9]+/' file.txt
使用awk
awk '/27\/8\/2019/' file.txt
awk '-your code-' file.txt > tmp && mv tmp file.txt
使用awk
awk '/27\/8\/2019/' file.txt
awk '-your code-' file.txt > tmp && mv tmp file.txt
如果日期只是一个示例,请使用此选项保留所有日期行:
awk '/[0-9]+\/[0-9]+\/[0-9]+/' file.txt
使用awk
awk '/27\/8\/2019/' file.txt
awk '-your code-' file.txt > tmp && mv tmp file.txt
可能重复注意,“可能重复”的可接受解决方案在这种情况下不起作用。使用替代分隔符可用于替换,但不匹配。转义斜杠对两者都有效,但使替换命令难以阅读。请注意,在这种情况下使用grep更容易。我必须接受我最后的评论;如@Cyrus所指出的,如果在正确的位置使用反斜杠,则可以使用替代分隔符进行模式匹配。注意,“可能重复”的可接受解决方案在这种情况下不起作用。使用替代分隔符可用于替换,但不匹配。转义斜杠对两者都有效,但使替换命令难以阅读。请注意,在这种情况下使用grep更容易。我必须接受我最后的评论;如@Cyrus所指出的,如果在正确的位置使用反斜杠,则可以使用另一个分隔符进行模式匹配。或者从
/
切换到另一个字符:\\124; 27/8/2019 |!d
@Cyrus:我已经使用sed很多年了,但从来都不知道这个把戏。或者从/
切换到另一个角色:\\124; 27/8/2019 |!赛勒斯:我已经使用sed很多年了,但从来都不知道这个把戏。