我正在尝试替换文件行之间的模式。
具体来说,我想在大文件和多个文件中用 , &\n
替换 ,\n &
。这实际上将符号 & 移动到上一行。使用 CTR+H 这很容易,但我发现使用 sed 很难。
因此,初始文件的格式如下:
A +,
& B -,
& C ),
& D +,
& E (,
& F *,
# & G -,
& H +,
& I (,
& J +,
K ?,
输出期望的形式是:
A +, &
B -, &
C ), &
D +, &
E (, &
F *, &
# & G -,
H +, &
I (, &
J +,
K ?,
根据之前关于 stackoverflow 的回答问题,我尝试使用以下命令对其进行转换:
sed ':a;N;$!ba;s/,\n &/&\n/g' file1.txt > file2.txt
sed -i -e '$!N;/&/b1' -e 'P;D' -e:1 -e 's/\n[[:space:]]*//'文件2.txt
但如果文件中存在符号“#”,它们就会失败。
有什么方法可以更简单地替换匹配的模式,比方说:
sed -i 's/,\n &/, &\n/g' 文件
提前致谢!
最佳答案
使用sed
$ sed ':a;N;s/\n \+\(&\) \(.*\)/ \1\n \2/;ba' input_file
A +, &
B -, &
C ), &
D +, &
E (, &
F *,
# & G -, &
H +, &
I (, &
J +,
关于bash - 替换行之间的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72228757/