Замена слова (с учетом регистра) в файле

Попробуйте

awk -F\| -vOFS=\| 'NR==2 {sub (/_[^_]*\./,".", $2)}1' file
No|filename|count
01 |com_101_00000_0001.txt|100


NR==2       if record count is 2 (i.e. 2. line)
sub (       `awk` "substitute" function
/_[^_]*\./  regex: match string consisting of multiple non-underscores, delimited by leading underscore and trailing literal dot
,".",       with a literal dot
 $2)        in second field
1           do default action: print

Перенаправление >во временный файл и mv/ cpобратно в исходный файл, если это необходимо. Для нескольких файлов запустите цикл forдля всех соответствующих файлов.

0
19.03.2020, 11:30
1 ответ

Если вы хотите заменить строку fooна bar, вы можете использовать это:

#!/bin/bash
# the pattern we want to search for
search="foo"
# the pattern we want to replace our search pattern with
replace="bar"
# my file
my_file="/path/to/file"
# generate a new file name if our search-pattern is contained in the filename
my_new_file="$(echo ${my_file} | sed "s/${search}/${replace}/")"
# replace all occurrences of our search pattern with the replace pattern 
sed -i "s/${search}/${replace}/g" "${my_file}"
# rename the file to the new filename
mv "${my_file}" "${my_new_file}"

Имейте в виду, что если шаблон поиска соответствует частям слова, эти части также заменяются, например.:

«У меня есть гусеница».

со строкой поиска «кошка» и строкой замены «собака» станет

«У меня есть догерпиллар».

Избежать этого, к сожалению, не совсем тривиально.

0
28.04.2021, 23:20

Теги

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