我无法使它或它的许多其他组合起作用:
sed -i '' '/@/!d' file.txt
sed -i '' '/\@/!d' file.txt
sed -n '/@/p' file.txt > newfile.tx
我错过了什么?
文件.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 为我指明了正确的方向。
最佳答案
看起来你真正的问题是你的行尾,但我认为最好的解决方案是使用 grep
和 -F
开关:
grep -F '@' file.txt
这将打印与固定字符串 @
匹配的行(此处不需要正则表达式匹配)。
您可以像这样通过管道传输 tr
的输出:
tr -d '\r' < file.txt | grep -F '@'
这里我删除了回车,而不是换行。假设您的文件包含 DOS 样式的行结尾 \r\n
,这可以防止将空行添加到文件中。
如果您的文件仅有回车符,那么您可以使用此选项将它们替换为换行符:
tr '\r' '\n' < file.txt | grep -F '@'
关于regex - 如何从文本文件中删除所有不包含 `@` 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30050949/