我试图在每一行的末尾追加一列内容例如,我有:
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/