1

Это мой текстовый файл

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, есть ли возможность добавить дополнительную строку "pause", только если последующая строка - это команда "date".
По сути это должен быть выход после замены.

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

Если бы я мог сделать общее регулярное выражение, которое может помочь мне во всех таких заменах, я был бы очень признателен

2 ответа2

1

Как обсуждалось в комментариях к вопросу, вот сценарий 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:

Как отметил Дэвид Постилл, я неправильно понял запрос. Но выполнение паузы перед записью строки и добавлением дополнительной обратной проверки для echo (остается пустым, когда эхо найдено) должно сделать эту работу. Спасибо Дэвид!

 #!/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
1

Как вставить строку перед другой строкой, которая соответствует шаблону?

  • Меню "Поиск"> "Заменить" (или Ctrl + H)

  • Установите "Найти что" на ^(date.*)$

  • Установите "Заменить" на pause\r\n\1

  • Включить "Регулярное выражение"

  • Нажмите "Заменить все"

Заметки:

  • Выше предполагается, что вы редактируете текстовый файл с Windows EOLs, \r\n .

  • Если вы используете файлы с разными EOL, вы можете преобразовать их в Windows EOL, используя меню "Правка"> "Преобразование EOL".

  • Если вы не работаете с Windows EOL и не хотите конвертировать их, используйте следующее:

    • Используйте \n вместо \r\n для EOL Unix/OS X

    • Используйте \r вместо \r\n для Mac OS (до версии 9) EOL


дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .