我有一个包含以下行的文本文件:
This is the first line
Second line
I have a mac
Used to have windows
Comfortable with both
所以现在我想 grep “I have a mac”,并将后面的所有内容移动到一个新文件中。我该怎么做?谢谢!
答案1
裁剪包含以下内容的行中的所有内容“我有一台 Mac”到文件末尾并将输出写入新文件:
sed -n '/I have a mac/,$ p' in-file > out-file
删除包含以下内容的行中的所有内容“我有一台 Mac”到文件末尾,在文件的位置进行更改并创建原始文件的备份副本:
sed '/I have a mac/,$ d' in-file -i.bak
使用包含您要搜索的字符串的变量并有条件地执行上述两个命令:
SEARCH='I have a mac'
sed -n "/$SEARCH/,$ p" in-file > out-file && sed "/$SEARCH/,$ d" in-file -i.bak
使用 grep (递归)查找哪些文件包含搜索的字符串,并通过管道将其名称传递xargs
给上述命令(参考):
export SEARCH='I have a mac'
grep -lr "$SEARCH" | xargs -L1 -I {} sh -c 'sed -n "/$SEARCH/,$ p" {} > {}.out && sed "/$SEARCH/,$ d" {} -i.bak'
答案2
您grep
可以使用-A
switch ( -->After Context) 并| tail -n+2
以第二行开始输出以跳过匹配。
grep -A $(wc -l < file) mac file | tail -n+2
但sed
对于这种情况,使用可能更好:
sed '1,/mac/d' file
这d删除从第一行 (1) 到匹配行的所有内容。
或者你可以使用awk
:
awk '{if(m)print}/mac/{m=1}' file
当变量 m 为真时将打印一行if(m)print}
,在第一次匹配后将其设置为 1/true /mac/{m=1}
。
stdout
可以通过重定向从命令“传输”到文件:> another_file
sed '1,/mac/d' file > another_file
#or
awk '{if(m)print}/mac/{m=1}' file > another_file