我想删除不的文件中的所有行:
something.something,东西,什么
例如,如果文件如下:
A sentence, some words
ABCD.CP3,GHD,HDID
Hello. How are you?
A.B,C,D
dbibb.yes,whoami,words
我会留下:
ABCD.CP3,GHD,HDID
A.B,C,D
dbibb.yes,whoami,words
如果我匹配了我不想删除的模式,我尝试分支到sed脚本的末尾,但是如果它不匹配则继续并删除该行:
cp $file{,.tmp}
sed "/^.+\..+,.+,.+$/b; /.+/d" "$file.tmp" > $file
rm "$file.tmp"
但这似乎没有任何影响。
我想我可以逐行读取文件,检查是否与模式匹配,如果有,则将其输出到文件中,但我想使用sed或类似文件。
答案 0 :(得分:4)
您可以成功使用grep
:
grep -E '^[^.]+\.[^,]+,[^,]+,[^,]+$' file > temp
mv temp file
答案 1 :(得分:4)
grep -E '^[^.]+\.[^.]+(,[^,]+){2}$'
答案 2 :(得分:3)
您可以打印与此something.something,something,something
模式匹配的行,而不是删除不符合模式的行。
$ sed -n '/^[^.]*\.[^,]*,[^,]*,[^,.]*$/p' file
ABCD.CP3,GHD,HDID
A.B,C,D
dbibb.yes,whoami,words
使用内联编辑选项-i[suffix]
保存所做的更改。
sed -ni.bak '/^[^.]*\.[^,]*,[^,]*,[^,.]*$/p' file
注意: -i[suffix]
如果提供suffix
则进行备份。
$ awk '/^[^.]*\.[^,]*,[^,]*,[^,.]*$/{print}' file
ABCD.CP3,GHD,HDID
A.B,C,D
dbibb.yes,whoami,words