我正在尝试将列内容附加到每行的末尾。例如,我有:
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
正则表达式 ([[: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/