我试图在每一行的末尾追加一列内容例如,我有:

0,John L Doe,Street,City

1,Jane L Doe,Street,City

2,John L Doe,Street,City

3,John L Doe,Street,City

4,Jane L Doe,Street,City

5,John L Doe,Street,City

6,John L Doe,Street,City

7,Jane L Doe,Street,City

尝试将第一列用逗号除掉,并将其附加到每行的末尾(包括字符“I”),使其成为:
0,John L Doe,Street,City I0

1,Jane L Doe,Street,City I1

2,John L Doe,Street,City I2

3,John L Doe,Street,City I3

4,Jane L Doe,Street,City I4

5,John L Doe,Street,City I5

6,John L Doe,Street,City I6

7,Jane L Doe,Street,City I7

添加“I”很容易添加到:sed 's/$/I/'文件中,但在复制和附加第一列内容时遇到问题

最佳答案

尝试:

$ sed -E 's/([[:digit:]]+),.*$/& I\1/' file
0,John L Doe,Street,City I0
1,Jane L Doe,Street,City I1
2,John L Doe,Street,City I2
3,John L Doe,Street,City I3
4,Jane L Doe,Street,City I4
5,John L Doe,Street,City I5
6,John L Doe,Street,City I6
7,Jane L Doe,Street,City I7

regex([[:digit:]]+),.*$从行的第一个数字匹配到行的末尾。表达式([[:digit:]]+)匹配第一个逗号前的所有数字,并将它们保存在组1中。替换文本是& I\1,sed用整个匹配替换&,并用组1替换\1
-E选项告诉sed使用扩展正则表达式(ERE)而不是默认的基本正则表达式(BRE)。
实际上,不需要在行尾匹配的$。因为sed正则表达式总是最左边最长的匹配项,所以我们的正则表达式无论如何都会匹配到行的末尾。所以,我们可以使用稍微简单一点的:
sed -E 's/([[:digit:]]+),.*/& I\1/' file

兼容性
以上内容适用于所有现代sed。对于较旧的GNU sed,将-E替换为-r
sed -r 's/([[:digit:]]+),.*/& I\1/' file

关于linux - 将第一列内容和前缀添加到行尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49091894/

10-15 01:20