假设我有一个带有下一个结构的文件(example.txt):
NAAME 111 2222 333
NAMME 111 22 333
NNA ME 444 555 2
NNAAME 1 5 8
N MEEE 44 66 111
我想用分隔符替换数字之间的空格,例如|
或,
但不影响名称。
我想的一个选项是更改名称中的空格并放置一个“低栏”,然后删除文件中的所有空格并写“|”然后再次更改空格名称中的“_”。
知道如何在shell中做到这一点?或者更好的选择?
期望输出将是这个
NAAME|111|2222|333
NAMME|111|22|333
NNA ME|444|555|2
NNAAME|1|5|8
N MEEE|44|66|111
非常感谢!
答案 0 :(得分:2)
您可以替换所有空格后跟数字:
$ sed 's/[[:space:]]\([[:digit:]]\)/|\1/g' file
NAME1|111|2222|333
NAME2|111|22|333
NA ME3|444|555|2
NAME4|1|5|8
N ME5|44|66|111
故障:
s/ / /g # Global substitute command
[[:space:]] # Match a space
[[:digit:]] # Match a digit
\( \) # Capture in \1
|\1 # Replace with | and captured digit
答案 1 :(得分:1)
您可以使用sed
表达式来执行此操作:
sed -i 's/\([[:digit:]]\)\ \([[:digit:]]\)/\1|\2/g' file.txt
输出:
NAME1|111|2222|333
NAME2|111|22|333
NA ME3|444|555|2
NAME4|1 5|8
N ME5|44|66|111
sed
命令的解释:
-i
:就地:修改file.txt \(<patter>\)
:将转义括号\(
和\)
之间的内容括起来,使它们成为可以引用的模式。因为我用了两次;在sed命令的第二部分;我可以使用\1
和\2
来引用这两种模式。