我无法将此或其他许多组合用于:
sed -i '' '/@/!d' file.txt
sed -i '' '/\@/!d' file.txt
sed -n '/@/p' file.txt > newfile.tx
我错过了什么?
file.txt的:
1. Lorem ip@sum dolor sit amet, consectetur adipiscing elit.
2. Nunc eu justo quis diam tempus auctor.
3. Suspe@ndisse in nulla et tellus aliquet finibus.
4. Aliquam @quis diam in tortor euismod faucibus ac lobortis massa.
5. Aenean feugiat nibh lobortis maximus pharetra.
6. Sed pharetra nibh id est lacinia, non pharetra nisi molestie.
在sed
或awk
或grep
或???
删除所有不包含@
的行后的所需结果:
1. Lorem ip@sum dolor sit amet, consectetur adipiscing elit.
3. Suspe@ndisse in nulla et tellus aliquet finibus.
4. Aliquam @quis diam in tortor euismod faucibus ac lobortis massa.
更新
原来有OS X
不喜欢的有趣的行结尾。以下工作:
tr '\r' '\n' < file.txt | grep -F '@' > newfile.txt
感谢@TomFenech指出我正确的方向。
答案 0 :(得分:4)
您还可以说:嘿,只需打印包含@
的行:
$ sed -n '/@/p' file
1. Lorem ip@sum dolor sit amet, consectetur adipiscing elit.
3. Suspe@ndisse in nulla et tellus aliquet finibus.
4. Aliquam @quis diam in tortor euismod faucibus ac lobortis massa.
答案 1 :(得分:4)
您的真实问题似乎与您的行结尾有关,但我认为最好的解决方案是将grep
与-F
开关一起使用:
grep -F '@' file.txt
这将打印与固定字符串@
匹配的行(此处不需要正则表达式匹配)。
您可以像这样管道tr
的输出:
tr -d '\r' < file.txt | grep -F '@'
这里我将删除回车符,而不是用换行符替换它们。假设您的文件包含DOS样式的行结尾\r\n
,这可以防止将空行添加到文件中。
如果您的文件仅具有回车符,则可以使用此选项将其替换为换行符:
tr '\r' '\n' < file.txt | grep -F '@'