Rya*_*yan 0 regex macos awk grep sed
我无法使它或此方法的许多其他组合起作用:
sed -i '' '/@/!d' file.txt
sed -i '' '/\@/!d' file.txt
sed -n '/@/p' file.txt > newfile.tx
Run Code Online (Sandbox Code Playgroud)
我想念什么?
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.
Run Code Online (Sandbox Code Playgroud)
期望的结果后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.
Run Code Online (Sandbox Code Playgroud)
更新
原来有OS X不喜欢的有趣的结尾。以下工作:
tr '\r' '\n' < file.txt | grep -F '@' > newfile.txt
Run Code Online (Sandbox Code Playgroud)
感谢@TomFenech为我指出正确的方向。
看起来您真正的问题在于您的行尾,但我认为最好的解决方案是grep与-F开关一起使用:
grep -F '@' file.txt
Run Code Online (Sandbox Code Playgroud)
这将打印与固定字符串匹配的行@(此处不需要正则表达式匹配)。
您可以通过管道传输如下输出tr:
tr -d '\r' < file.txt | grep -F '@'
Run Code Online (Sandbox Code Playgroud)
在这里,我将删除回车符,而不是用换行符替换它们。假设您的文件包含 DOS 样式的行尾\r\n,这可以防止将空行添加到文件中。
如果您的文件只有回车符,那么您可以使用此选项将它们替换为换行符:
tr '\r' '\n' < file.txt | grep -F '@'
Run Code Online (Sandbox Code Playgroud)
你可以做:
grep '@' file
Run Code Online (Sandbox Code Playgroud)
或与sed
sed -i '/@/!d' file
Run Code Online (Sandbox Code Playgroud)
所以您的问题是,您在sed -i和之间添加了一个空格''。有了这个空间,sed(经过gnu sed测试)不会认为以后''要备份。另外,如果您有-i选择,则不需要重定向。它将始终为您提供一个空文件。
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |