Заменить определенные строки

$ awk -F, 'NR==FNR{a[$1,$2]++; next} a[$1,$2]>1' file.txt file.txt 
spark2-thrift-sparkconf,spark.history.fs.logDirectory,{{spark_history_dir}}
spark2-thrift-sparkconf,spark.history.fs.logDirectory,true

Обработка двух файлов с использованием одного и того же входного файла дважды

  • NR==FNR{a[$1,$2]++; next}используя первые два поля в качестве ключа, сохранить количество вхождений
  • a[$1,$2]>1печатать, только если count больше 1 во время второго прохода


Для противоположного случая простой вопрос проверки изменения условия

$ awk -F, 'NR==FNR{a[$1,$2]++; next} a[$1,$2]==1' file.txt file.txt 
spark2-thrift-sparkconf,spark.history.Log.logDirectory,true
spark2-thrift-sparkconf,spark.history.DF.logDirectory,true
-1
03.09.2020, 03:04
1 ответ

Попробуйте:

$ sed -E 's@.*(/s-show)@https://www.testpage.com\1@' File
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show/...
https://www.testpage.com/s-show

Чтобы заменить файл на месте:

sed -Ei 's@.*(/s-show)@https://www.testpage.com\1@' File  # GNU (Linux)

или:

sed -Ei '' 's@.*(/s-show)@https://www.testpage.com\1@' File  # BSD (MacOS)

Как это работает:

  • -Eговорит sed использовать расширенные регулярные выражения. Это устраняет необходимость в некоторых escape-символах.

  • s@old@new@— это команда замены, которая ищет регулярное выражение oldи заменяет его на new.

  • В нашем случае old— это .*(/s-show), который соответствует любому количеству любых символов, .*, за которым следует /s-show, где /s-showсохраняется как группа 1.

  • В нашем случае new— это https://www.testpage.com\1, где \1заменено на группу 1.

0
18.03.2021, 23:07

Теги

Похожие вопросы