bash - 替换行之间的模式

标签 bash shell unix sed

我正在尝试替换文件行之间的模式。

具体来说,我想在大文件和多个文件中用 , &\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/

相关文章:

git - 在 git clone 之后删除不可见的目录

linux - 在另一个函数中调用一个函数

c++ - 套接字编程 : combine data from fork()-ed processes

arrays - 有没有办法在 BASH 中使用 for 循环遍历多个数组

bash - Bad Substitution - 其他变量名称中的变量名称 - 在 Bash 中

macos - 查找所有带有特定 'color' 标签的 OSX 文件

linux - 如何在unix中通过数据分组来验证计数

java - 如何使用java代码检查服务是否正在linux机器上运行

python - 从命令行运行 R 脚本(从 python 执行)

php - 从 cli php 脚本进行管道传输时,如何识别击键?