使用sed复制和修改bash中的单词

时间:2017-05-17 14:17:08

标签: bash awk sed

我在Linux操作系统上。我有一个要在我的bash脚本中修改的文件。

我的原始文件是这样的:

...
ERIC-1898
HELENE-5456
THOMAS-54565
IRON-06516
...

我想用重复的字词(以及第二个字段中的-SYSTEM-字词)修改此文件,并添加双引号。 所以,结果必须是这样的:

...
"ERIC-1898" "ERIC-SYSTEM-1898" 
"HELENE-5456" "HELENE-SYSTEM-5456"
"THOMAS-54565" "THOMAS-SYSTEM-54565"
"IRON-06516" "IRON-SYSTEM-06516"
...

我该怎么做,例如用sed?

4 个答案:

答案 0 :(得分:1)

使用sed和两个捕获组:

$ sed 's/\(.*-\)\(.*\)/"&" "\1SYSTEM-\2"/' infile
"ERIC-1898" "ERIC-SYSTEM-1898"
"HELENE-5456" "HELENE-SYSTEM-5456"
"THOMAS-54565" "THOMAS-SYSTEM-54565"
"IRON-06516" "IRON-SYSTEM-06516"

假设每个输入行只有一个连字符。

答案 1 :(得分:0)

awk 解决方案:

awk -F'-' '{printf("\"%s\" \"%s-SYSTEM-%s\"\n", $1FS$2,$1,$2)}' file

输出如下:

"ERIC-1898" "ERIC-SYSTEM-1898"
"HELENE-5456" "HELENE-SYSTEM-5456"
"THOMAS-54565" "THOMAS-SYSTEM-54565"
"IRON-06516" "IRON-SYSTEM-06516"

答案 2 :(得分:0)

不使用外部程序:

#!/bin/bash

IFS=$'-'
while read -r first second;do
    echo "\"$first-$second\" \"$first-SYSTEM-$second\""
done <infile

答案 3 :(得分:0)

awk '{sub(/ /,"\" \"");print "\042" $0 "\042"}' file

"ERIC-1898" "ERIC-SYSTEM-1898"
"HELENE-5456" "HELENE-SYSTEM-5456"
"THOMAS-54565" "THOMAS-SYSTEM-54565"
"IRON-06516" "IRON-SYSTEM-06516"