如何在 Notepad++ 中在符合特定模式的两行之间插入一行

如何在 Notepad++ 中在符合特定模式的两行之间插入一行

这是我的文本文件

echo Move date ahead 18 days to 30-09-2016
date 30-09-2016
echo Basic Rule Backups
echo Move date ahead 1 day to 1-10-2016
date 1-10-2016
echo date ahead 1 day to 2-10-2016
date 2-10-2016

使用 Notepad++ 甚至 Notepad,是否有办法仅当下一行是“date”命令时才添加额外的行“pause”。
本质上这应该是替换后的输出。

echo Move date ahead 18 days to 30-09-2016
pause
date 30-09-2016
echo Basic Rules 
echo Move date ahead 1 day to 1-10-2016
pause
date 1-10-2016
echo date ahead 1 day to 2-10-2016
pause
date 2-10-2016

如果我有一个通用的正则表达式可以帮助我进行所有这些替换,我将不胜感激

答案1

如何在与模式匹配的另一行之前插入一行?

  • 菜单“搜索”>“替换”(或Ctrl+ H

  • 将“查找内容”设置为^(date.*)$

  • 将“替换为”设置为pause\r\n\1

  • 启用“正则表达式”

  • 点击“全部替换”

在此处输入图片描述

笔记:

  • 以上内容假设您正在使用 Windows EOL 编辑文本文件\r\n

  • 如果您使用具有不同 EOL 的文件,您可以使用菜单“编辑”>“EOL 转换”将它们转换为 Windows EOL。

  • 如果您没有使用 Windows EOL,并且不想转换它们,请改用以下命令:

    • 对于 Unix/OS X EOL,请使用\n代替\r\n

    • \r对于\r\nMac OS(最高版本 9)EOL,请使用


进一步阅读

答案2

正如问题评论中所讨论的那样,这是可以实现此目的的 bash 脚本。谢谢

#!/bin/bash
### set input and output file names
input=test.txt
output=pause.txt

## run the script
while read foo; do echo $foo >> $output
   if [ "$(echo $foo | grep date)" != "" ]
      then echo "pause" >> $output
   fi
done < $input


### EXPLANATION
### The while loop runs until the input runs out of lines
### It takes one line and echo it out in a new file
### It makes an if check. It takes the line and checks if there is the 
### word 'date' in it. If yes, then the whole line will be the output,
### if no, it will be empty
### The if check checks if it is empty. If it is not empty
### (,hence date was present), it adds an additional line 
### saying 'pause' into the new file
### you will end up with two files. One with, one without pause.

编辑1:

正如 DavidPostill 指出的那样,我误解了请求。但在写入行之前回显暂停并添加额外的反向检查echo(当发现回显时保持空白)应该可以完成工作。谢谢 David!

 #!/bin/bash
### set input and output file names
input=test.txt
output=pause.txt

## run the script
while read foo; do
   if [ "$(echo $foo | grep date | grep -v echo)" != "" ]
      then echo "pause" >> $output
   fi
    echo $foo >> $output
done < $input

相关内容