输入:
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
但相反,它再次打印输入。怎么了?
答案 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命令。