SED命令使用多种模式
我使用sed命令搜索多个模式。 该命令在找到匹配项时工作并打印行 但是我需要做两件事(这是我使用的命令)
sed -r '/pattern1|pattern2/!d' filename
A - 打印包含第一个图案的线条 然后不仅打印匹配第二个模式的行 但打印下面的行数。我想说明一下 第二个模式搜索下面的行数。
B - 我需要打印第一个图案,然后只打印下面一定数量的线 第二个模式但省略包含搜索模式的行
简而言之,我需要控制指定下面的行数 我的第二个serach模式,并省略包含serach patetrn的行,如果 我决定这样做
Hostname1
section1
a
section2
a
c
d
Hostname2
section1
a
section2
x
y
d
所需的输出
hostname1
section2
a
c
hostname2
section2
x
y
答案 0 :(得分:0)
# Create test file
(
cat << EOF
Hostname1
section1
a
section2
a
c
d
Hostname2
section1
a
section2
x
y
d
EOF
) > filename
# transformation
cat filename | grep -v "^ *$" | sed -e "s/\(Hostname\)/==\1/g" | sed -e "s/\(section\)/=\1/g" | tr '\n' '|' | tr '=' '\n' | sed -r '/Hostname1|Hostname2|section2/!d' | cut -d"|" -f-3 | tr '|' '\n' | grep -v "^ *$" | sed -e "s/\(Hostname\)/\n\1/g"
# etape 1 : transforme each section to on ligne, with a dilimiter "|" :
cat filename | grep -v "^ *$" | sed -e "s/\(Hostname\)/==\1/g" | sed -e "s/\(section\)/=\1/g" | tr '\n' '|' | tr '=' '\n'
#Hostname1|
#section1|a|
#section2|a|c|d|
#
#Hostname2|
#section1|a|
#section2|x|y|d|
# etape 2 : cut n+1 fild ( cut -d"|" -f-3 ) :
cat filename | cat filename | grep -v "^ *$" | sed -e "s/\(Hostname\)/==\1/g" | sed -e "s/\(section\)/=\1/g" | tr '\n' '|' | tr '=' '\n' | sed -r '/Hostname1|Hostname2|section2/!d' | cut -d"|" -f-3
#Hostname1|
#section2|a|c
#Hostname2|
#section2|x|y
#etape 3 : transfomation to wanted format :
cat filename | cat filename | grep -v "^ *$" | sed -e "s/\(Hostname\)/==\1/g" | sed -e "s/\(section\)/=\1/g" | tr '\n' '|' | tr '=' '\n' | sed -r '/Hostname1|Hostname2|section2/!d' | cut -d"|" -f-3 | tr '|' '\n' | grep -v "^ *$" | sed -e "s/\(Hostname\)/\n\1/g"
#Hostname1
#section2
#a
#c
#
#Hostname2
#section2
#x
#y