regex - 如何从文本文件中删除所有不包含 `@` 的行?

标签 regex macos awk sed grep

我无法使它或它的许多其他组合起作用:

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 之后的期望结果或 awkgrep???删除所有不包含 @ 的行:

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/

相关文章:

javascript - 正则表达式:如何获取 HTML 字符串中的最后一个单词而忽略 HTML 标签?

shell - 使用 if-else 检查数字序列的连续性

awk - 如何使用 AWK 将带有特殊字符的字符串附加到每一行

python - HomeBrew 安装的 Anaconda "Path not writable or missing."

android - 无法在 Samsung Epic 4G 上测试我的 Android 应用程序,因为 adb 看不到它

regex - 寻求引用以了解一种模式 “!_[$0]++”

javascript - 即使函数为真,表单也不提交

javascript - 如何用lodash替换数组中的十进制数

ios - 如果正则表达式有效,如何检查 Swift?

r - 在 R 上运行 CellNet 时未加载 dyld