Мне нужно найти строку, которая начинается с указанных ниже строк ввода в файле, и заменить содержимое файла, если оно частично совпадает.
Входной параметр:
Сценарий-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