test.sed:
/^$\([a-z][a-z][a-z]\)$\([0-9][0-9][0-9]\)=\([0-9][0-9][0-9][0-9]\)/p
/^\+1$\([a-z][a-z][a-z]\)$\([0-9][0-9][0-9]\)=\([0-9][0-9][0-9][0-9]\)/p
/^1$\([a-z][a-z][a-z]\)$\([0-9][0-9][0-9]\)=\([0-9][0-9][0-9][0-9]\)/p
file.txt的:
$abc$123=1234
1$abc$123=1234
11$abc$123=1234
+$abc$123=1234
++$abc$123=1234
+1$abc$123=1234
++11$abc$123=1234
命令我以前运行test.sed:
sed -n -f test.sed file.txt
输出:
$abc$123=1234
1$abc$123=1234
+1$abc$123=1234
预期输出:
11$abc$123=1234
+$abc$123=1234
++$abc$123=1234
++11$abc$123=1234
我创建了test.sed
,它将抓取任何包含3种模式的行并显示它们。
我想要做的是反转输出,就像它在上面的预期输出中显示的那样,包含当前test.sed
无法抓取的行。
我该怎么做?我尝试在test.sed的所有3个命令的末尾放置/!p
而不是/p
,但由于许多重复,它无法正常工作。
答案 0 :(得分:0)
的倒数
sed -n '/pattern/p' infile
是
sed '/pattern/d' infile
或者,如果您的/pattern/d
命令位于单独的文件中,
sed -f sedscr.sed infile
请注意,这恰好模仿了grep -f
和grep -vf
所做的事情:如果您的模式是pattern1
和pattern2
那么
$ cat sedscr1.sed
/pattern1/p
/pattern2/p
$ sed -n -f sedcsr1.sed infile
与
相同$ cat grep_patterns
pattern1
pattern2
$ grep -f grep_patterns infile
和
$ cat sedscr2.sed
/pattern1/d
/pattern2/d
$ sed -f sedscr2.sed infile
与
具有相同的输出grep -vf grep_patterns infile
(同一档案grep_patterns
)。