我在文件中有以下文字,我希望找到单词fox
,并希望从文本开头删除单词fox
之前的文字。 (包括狐狸)
如果没有匹配,我想保留整个文字。
The quick
brown fox
jumps over
the lazy dog
要求的结果将是:
jumps over
the lazy dog
要使用的工具并不重要,但我在Windows上使用Msys,而不是所有的花哨工具都在这里实现。
我尝试的事情:
var=$(echo "${raw}" | awk "/replaceme/{i++}i")
var=$(echo "${raw}" | sed -n "/replaceme/,${p}")
var=$(echo "${raw}" | sed -r -n -e "/replaceme/,${p}")
var=$(echo "${raw}" | sed "/replaceme/,$!d")
由于
答案 0 :(得分:2)
您可以在awk
:
awk -v s="fox" '$0~s{re="^.*" s "[[:space:]]*"; sub(re, ""); }1' RS= file
jumps over
the lazy dog
未找到模式时:
awk -v s="box" '$0~s{re="^.*" s "[[:space:]]*"; sub(re, ""); }1' RS= file
The quick
brown fox
jumps over
the lazy dog
编辑:如果您想删除匹配后的文字(包括匹配线):
awk -v s="over" '$0~s{re="\n[^\n]*" s ".*$"; sub(re, ""); }1' RS= file
The quick
brown fox
答案 1 :(得分:0)
如果只是第一次出现fox
,您可以:
sed '1,/fox/d' file
如果要修改文件,请添加-i
作为选项。
删除最后一次出现的行:
awk 'BEGIN{start=1}{a[NR]=$0}/fox/{start=NR+1}END{for(i=start;i<=NR;++i)print a[i]}' file
修改:
awk 'BEGIN{start=1;file=ARGV[1]}{a[NR]=$0}/fox/{start=NR+1}END{printf("")>file;for(i=start;i<=NR;++i)print a[i]}>file' file
答案 2 :(得分:0)
您可以使用/^.*fox(.+)|.+/s
下载正则表达式路径。
这样,它会从fox
的最后一次出现后的文本中获取所有内容,如果没有找到,则会包含所有内容。