![需要搜索文件中包含逗号的行并希望将其替换为其前行](https://linux22.com/image/179603/%E9%9C%80%E8%A6%81%E6%90%9C%E7%B4%A2%E6%96%87%E4%BB%B6%E4%B8%AD%E5%8C%85%E5%90%AB%E9%80%97%E5%8F%B7%E7%9A%84%E8%A1%8C%E5%B9%B6%E5%B8%8C%E6%9C%9B%E5%B0%86%E5%85%B6%E6%9B%BF%E6%8D%A2%E4%B8%BA%E5%85%B6%E5%89%8D%E8%A1%8C.png)
我有一个文件 test.txt,其中几行有单个逗号,如下所示。
$ cat test.txt
ABCD
Test,plan
Sample
Working
Tester,Developer
Learn
Teach
Study
Coding
Stack,exchange
需要输出如下:
ABCD
ABCD
Sample
Working
Working
Learn
Teach
Study
Coding
Coding
我无法找到使用 unix 命令打印上述内容的方法,请让我知道如何处理此逗号行搜索并将其替换为上面的行。
尝试如下搜索不确定是否替换:
#Searching comma
sed -i 's/,/replace_above_line/g' test.txt
我想用文件中包含逗号的前一行进行全局替换。
答案1
对于sed
,您需要在模式空间中保留两行 - 例如
sed -i -e '$!N;s/\(.*\)\n.*,.*/\1\n\1/' -e 'P;D' file
或者,使用ed
,您可以标记逗号行 ( g/,/-1
) 之前的每一行,然后复制它们 ( t
) 并返回并删除原始行 ( -1d
):
$ ed -s file
g/,/-1t\
-1d
wq
或作为单行:
printf '%s\n' g/,/-1t\\ -1d wq | ed -s file