我有以下输入:
10
12 a
12 a
14a
以下命令:
sed -rn '/^[0-9]*[02468]\s/p'
(或者等效的grep命令)返回
12 a
12 a
只返回10而不是10后面的EOL,因为10后面有一个EOL。另一方面,如果我去掉\s,也会返回14a,这不是一个数字。
谢谢!
sed -rn '/^[0-9]*[02468] |^[0-9]*[02468]$|^[0-9]*[02468]\t/p' n.txt
sed -rn 's/^[0-9]*[02468] |^[0-9]*[02468]$|^[0-9]*[02468]\t/blah/p' n.txt
search & replacement using awk
:
awk -F" " '{if ($1 ~ /[02468]$/ && $1 % 2 == 0) print $1}' n.txt
awk -F" " '{if ($1 ~ /[02468]$/ && $1 % 2 == 0) print gensub($1,"blah", 1); else print $0;}' n.txt
注意:
第10行后面没有任何内容,第12行后面有空格,第16行后面有制表符。
示例运行
[/c]$ cat n.txt
10
11
12 a
13
14a
16
[/c]$ sed -rn '/^[0-9]*[02468] |^[0-9]*[02468]$|^[0-9]*[02468]\t/p' n.txt
10
12 a
16
[/c]$ sed -rn 's/^[0-9]*[02468] |^[0-9]*[02468]$|^[0-9]*[02468]\t/blah/p' n.txt
blah
blaha
blah
示例运行(使用awk)
[/c]$ cat n.txt
10
11
12 a this is spaced line
13
14a
16 this is tab line
[/c]$ awk -F" " '{if ($1 ~ /[02468]$/ && $1 % 2 == 0) print $0}' n.txt
10
12 a this is spaced line
16 this is tab line
[/c]$ awk -F" " '{if ($1 ~ /[02468]$/ && $1 % 2 == 0) print gensub($1,"blah", 1); else print $0;}' n.txt
blah
11
blah a this is spaced line
13
14a
blah this is tab line
sed
进行搜索和替换。 - JRG允许在文本结尾处而非其它字符处返回。
$ sed -rn '/^[0-9]*[02468](\s|$)/p' < data
10
12 a
12 a