如何从 Bash 中的文本文件中获取第二个结果?
How to grep second results from text file in Bash?
我有包含以下内容的文本文件:
4
:
ID: 5
table: 4
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
--
17:
ID: 19
table: 7
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
--
18:
ID: 20
table: 3
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
--
19:
ID: 21
table: 5
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
我怎样才能像这样 grep 结果:
4:
ID: 5
table: 4
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
然后我 grep 这个结果:
17:
ID: 19
table: 7
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
然后我得到这个结果:
18:
ID: 20
table: 3
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
然后我得到这个结果:
19:
ID: 21
table: 5
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
我需要 grep 这个结果在一个 Bash 脚本中。怎么做?
我需要得到第一个结果,然后在我的文本文件中得到下一个结果
这会给你记录4
..
grep -A8 '[[:space:]]*4:' file
等等。该命令考虑到记录的长度为 8
行,-A8
将输出匹配行及其后的 8
行.
您可以创建一个小循环来为每条感兴趣的记录执行命令,并将循环的输出重定向到 text.file:
for i in 4 17 18 19 ; do
grep -E -A8 "[[:space:]]*$i:" input.txt
done > output.txt
或者您可以使用 awk
使用记录分隔符 RS="\n *--\n"
:
awk -F$'\n' ' ~ /\y(4|17|18|19):/' RS="\n *--\n" input.txt > output.txt
谢谢!是工作!
我用这个:
for i in 4 17 18 19 ; do
grep -E -A8 "[[:space:]]*$i:" input.txt
done > output.txt
我有包含以下内容的文本文件:
4
:
ID: 5
table: 4
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
--
17:
ID: 19
table: 7
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
--
18:
ID: 20
table: 3
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
--
19:
ID: 21
table: 5
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
我怎样才能像这样 grep 结果:
4:
ID: 5
table: 4
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
然后我 grep 这个结果:
17:
ID: 19
table: 7
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
然后我得到这个结果:
18:
ID: 20
table: 3
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
然后我得到这个结果:
19:
ID: 21
table: 5
numplan: no_change
accs-cat: no_change
cld-rule: $
cld-type: no_change
cld-numplan: no_change
clg-rule: '----------+79975532211'
我需要 grep 这个结果在一个 Bash 脚本中。怎么做?
我需要得到第一个结果,然后在我的文本文件中得到下一个结果
这会给你记录4
..
grep -A8 '[[:space:]]*4:' file
等等。该命令考虑到记录的长度为 8
行,-A8
将输出匹配行及其后的 8
行.
您可以创建一个小循环来为每条感兴趣的记录执行命令,并将循环的输出重定向到 text.file:
for i in 4 17 18 19 ; do
grep -E -A8 "[[:space:]]*$i:" input.txt
done > output.txt
或者您可以使用 awk
使用记录分隔符 RS="\n *--\n"
:
awk -F$'\n' ' ~ /\y(4|17|18|19):/' RS="\n *--\n" input.txt > output.txt
谢谢!是工作!
我用这个:
for i in 4 17 18 19 ; do
grep -E -A8 "[[:space:]]*$i:" input.txt
done > output.txt