Ответ 1
Это может сработать для вас (GNU sed):
sed 's/.*000/#&/' file
Мне нужно добавить #
перед любой строкой, содержащей шаблон "000", например, рассмотреть этот пример файла:
This is a 000 line.
This is 000 yet ano000ther line.
This is still yet another line.
Если я запустил команду, она должна добавить #
в начало любых файлов, где было найдено "000". Результатом будет следующее:
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.
Лучшее, что я могу сделать, это цикл while, который выглядит слишком сложным:
while read -r line
do
if [[ $line == *000* ]]
then
echo "#"$line >> output.txt
else
echo $line >> output.txt
fi
done < file.txt
Как добавить #
в начало любой строки, где найден шаблон?
Это может сработать для вас (GNU sed):
sed 's/.*000/#&/' file
Следующая команда sed будет работать для вас, которая не требует каких-либо групп захвата:
sed /000/s/^/#/
Пояснение:
/000/
соответствует строке с 000
s
выполнить подстановку в строках, сопоставленных выше#
) в начале строки (^
)или используйте ed
:
echo -e "g/000/ s/^/#/\nw\nq" | ed -s FILENAME
или открыть файл в ed:
ed FILENAME
и напишите эту команду
g/000/ s/^/#/
w
q
Попробуйте эту команду GNU sed,
$ sed -r '/000/ s/^(.*)$/#\1/g' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.
Объяснение:
/000/
замена sed работает только на строке, которая соответствует 000
. Когда он найдет соответствующую строку, он добавит символ #
.И через awk,
$ awk '/000/{gsub (/^/,"#")}1' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line
gsub
используется для добавления #
infront строк, содержащих 000
.