这个sed有什么问题?

时间:2017-02-01 12:52:42

标签: linux sed

输入:

ADAMS, Andrew 1234
BAYES, Ryan 9292

people.txt内,我使用了:

cat people.txt | sed 's/\([A-Z]+\),[[:space:]]+\([A-Z]\)\([a-z]+\).*/(\2) \2\3 \1/'

预计会得到:

(A) Andrew ADAMS
(R) Ryan BAYES

但相反,它再次打印输入。怎么了?

2 个答案:

答案 0 :(得分:0)

awk -F '[,[:blank:]]+' '{printf( "(%s) %s %s\n", substr($2,1,1), $2, $1}' people.txt

# alternative sed
sed 's/\([^[:blank:]]*\),[[:blank:]]*\(\(.\)[^[:blank:]]*\).*/(\3\) \2 \1/' people.txt
sed不需要

cat | sed(也许这只是为了这个OP的样本用途)

答案 1 :(得分:0)

怎么样

sed 's/\(^.\)\([a-z]*\),\s*\([a-z]*\)\(.*$\)/(\1) \3 \1\2/gi' temp

最后使用i可以忽略区分大小写

使用星号是反斜杠+

的较短等价物

使用反斜杠s相当于[[:space:]]

它还删除了不必要的cat命令。