我有n个文件,比如:
文件1:
1aaa
2eee
Test XXX
Hanna
Lars
Run Code Online (Sandbox Code Playgroud)
文件2:
1fff
2ddd
3zzz
Test XXX
Mike
Charly
Run Code Online (Sandbox Code Playgroud)
我想从所有n个文件中删除"Test XXX"之前的所有行.要删除的行数因文件而异.
我的想法:
for file in 1 :n
do
pos=grep -n "Test XXX" file$file
sed -i "1:$pos-1 d" file$file >new$file
done
Run Code Online (Sandbox Code Playgroud)
zta*_*013 21
这应该适合你:
sed -i '1,/Test XXX/d' file1
sed -i '1,/Test XXX/d' file2
Run Code Online (Sandbox Code Playgroud)
或者干脆
sed -i '1,/Test XXX/d' file*
Run Code Online (Sandbox Code Playgroud)
这将适用于您的示例,即使匹配的模式位于第一行:
sed -n -E -e '/Text XXX/,$ p' input.txt | sed '1 d'
Run Code Online (Sandbox Code Playgroud)
例如,如果输入简单
Test XXX
Mike
Charly
Run Code Online (Sandbox Code Playgroud)
这会给你
Mike
Charly
Run Code Online (Sandbox Code Playgroud)
如果你想保留第一场比赛,Test XXX那么只需使用:
sed -n -E -e '/Text XXX/,$ p' input.txt
Run Code Online (Sandbox Code Playgroud)
你可以这样做bash(例如1个文件)
t=0
while read -r line
do
[[ $line =~ Test.*XXX ]] && t="1"
case "$t" in
1) echo "$line";;
esac
done < file > tempo && mv tempo file
Run Code Online (Sandbox Code Playgroud)
根据需要使用for循环来遍历所有文件