我试图在原始行之后插入修改后的行副本。
这是我的档案:
random
N:John Doe
random
N:Jane Roe
random
random
N:Name Sirname
random
这是我的文件需要的样子:
random
N:John Doe
FN:John Doe
random
N:Jane Roe
FN:Jane Roe
random
random
N:Name Sirname
FN:Name Sirname
random
对于这个的任何想法?似乎无法找到合适的sed / awk组合......
答案 0 :(得分:4)
sed -n ' p; s/^N:/FN:/p' original.txt
这会产生:
random
N:John Doe
FN:John Doe
random
N:Jane Roe
FN:Jane Roe
random
random
N:Name Sirname
FN:Name Sirname
random
它的工作原理如下。我们调用sed -n
这意味着,默认情况下,它不会打印任何行。然后,我们给它两个命令。第一个是p
,用于打印现有的未修改的行。第二个s/^N:/FN:/p
告诉它尝试将FN:
替换为任何前导N:
,如果该替换成功(意味着该行实际上以N:
开头),然后也打印修改后的版本。
答案 1 :(得分:2)
您应该可以使用以下内容执行此操作:
sed -e 's/^\(N:.*\)$/\1\nF\1/g' yourfile.txt
这使用正则表达式来查找以字符序列“N:”开头的文件。当它找到它时,它会用\1\nF\1
替换该行(原始行,加上换行符加上大写'F',再加上原始行)。
这一切都假设“随机”行不会以“N:”开头。
答案 2 :(得分:2)
$ sed 's/^N:.*/&\nF&/' /tmp/corpus.txt
random
N:John Doe
FN:John Doe
random
N:Jane Roe
FN:Jane Roe
random
random
N:Name Sirname
FN:Name Sirname
random
答案 3 :(得分:1)
以下是awk
解决方案:
awk '/N:/{print $0"\nF"$0;next}1' file
$ cat file
random
N:John Doe
random
N:Jane Roe
random
random
N:Name Sirname
random
$ awk '/N:/{print $0"\nF"$0;next}1' file
random
N:John Doe
FN:John Doe
random
N:Jane Roe
FN:Jane Roe
random
random
N:Name Sirname
FN:Name Sirname
random