Поиск частично совпадающего шаблона строк в файле и замена его - PullRequest
1 голос
/ 07 ноября 2019

Мне нужно найти строку, которая начинается с указанных ниже строк ввода в файле, и заменить содержимое файла, если оно частично совпадает.

Входной параметр:

Сценарий-1:

STRING="user::r--,user::ourfrd:r--"

Сценарий-2:

STRING="user::r--"`

Входные данные доступны в file.txt:

# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::rwx
user:myfrd:rwx
user:hisfrd:r-x
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x

Я применил приведенную ниже логику для удаления запятой, если она есть в строке, а затем сохранил каждую строку в массиве. Затем я попытался найти его в файле, но замена содержимого файла не работает должным образом.

Для сценария-1:

#/bin/bash
STRING="user::r--,user:ourfrd:r--"
array=`echo $STRING | awk -F ',' '{ s = $1; for (i = 2; i <= NF; i++) s = 
s "\n"$i; print s; }'`
for word in ${array}
do
        sed -r -e 's/${array}[^{array}]+//g' file.txt
done

Для сценария-2:

#/bin/bash
STRING="user::r--"
array=`echo $STRING | awk -F ',' '{ s = $1; for (i = 2; i <= NF; i++) s = 
s "\n"$i; print s; }'`
for word in ${array}
do
        sed -r -e 's/${array}[^{array}]+//g' file.txt
done

Ожидаемые результаты - данные измененного файла

Для сценария-1:

# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::r--
user:myfrd:rwx
user:hisfrd:r-x
user:ourfrd:r--
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x

Примечание: В приведенном выше примере строка "user: ourfrd: r--"добавлен недавно в файл, так как он еще не доступен в файле. В файле существуют только частично совпадающие строки, которые нужно заменить, например, как у нас есть «user :: rwx», а первые несколько символов «user ::» сопоставляются с новым входным параметром «user :: r--»

Для сценария-2:

# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::r--
user:myfrd:rwx
user:hisfrd:r-x
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x
...