如何保留某些行号并删除其余行号
How to keep certain line numbers and delete the rest
使用 sed 我知道如何删除某些行号,例如
sed -i.bak -e '6d;8d;15d;' file
如何实现它的逆向。我想保留这些行并删除其余部分。我想就地执行此操作,因为我有大量文件并且我会将其用作更大脚本的一部分。我仍在保留备份,因为我不想弄乱我的原始数据集。
如何停止 sed
的打印,然后提及要打印这些行的位置。
sed -i.bak -n '6p;8p;15p;' Input_file
来自man sed
:
-n, --quiet, --silent
suppress automatic printing of pattern space
p Print the current pattern space.
RavinderSingh13 的解决方案很好,使用 sed
和 -n
标志来抑制模式 space 的自动打印。如果不想使用该标志,可以使用标签和 sed-goto 语句:
sed '6b;8b;15b;d;' file
这基本上说明:
6b
如果我在第6行,分支到最后
8b
如果我在第8行,分支到最后
15b
如果我在第15行,分支到最后
d
如果我还没有分支,删除模式space并开始下一个循环
在这种情况下,与 -n
标志的用法相反,模式 space 总是在循环结束时打印。
如果你想使用awk
,你可以这样做:
awk '(FNR==6) || (FNR==8) || (FNR==15)' file
还有:
sed -e '6!{8!{15!d;};}'
使用 sed 我知道如何删除某些行号,例如
sed -i.bak -e '6d;8d;15d;' file
如何实现它的逆向。我想保留这些行并删除其余部分。我想就地执行此操作,因为我有大量文件并且我会将其用作更大脚本的一部分。我仍在保留备份,因为我不想弄乱我的原始数据集。
如何停止 sed
的打印,然后提及要打印这些行的位置。
sed -i.bak -n '6p;8p;15p;' Input_file
来自man sed
:
-n, --quiet, --silent suppress automatic printing of pattern space p Print the current pattern space.
RavinderSingh13 的解决方案很好,使用 sed
和 -n
标志来抑制模式 space 的自动打印。如果不想使用该标志,可以使用标签和 sed-goto 语句:
sed '6b;8b;15b;d;' file
这基本上说明:
6b
如果我在第6行,分支到最后8b
如果我在第8行,分支到最后15b
如果我在第15行,分支到最后d
如果我还没有分支,删除模式space并开始下一个循环
在这种情况下,与 -n
标志的用法相反,模式 space 总是在循环结束时打印。
如果你想使用awk
,你可以这样做:
awk '(FNR==6) || (FNR==8) || (FNR==15)' file
还有:
sed -e '6!{8!{15!d;};}'