Как заменить текст, находящийся в определенном месте файла, текстом, находящимся в другом файле, с помощью сценария bash?

Разрешение на запись также означает разрешение на удаление, вот как:

Если пользователь должен иметь разрешение на запись, он также может «удалить» файл, записав в файл один байт и, таким образом, удалив все остальное содержимое этого файла. Самба никак не может обнаружить ОС и на ее основе дать определенные разрешения.

1
14.03.2020, 06:04
2 ответа

Чтобы изменить не -пустые символы перед концом строки в строке 2, вы можете использовать

sed -i'' -e '2{s/[^[:blank:]]*$/'"$(cat subfile.txt)"'/;}' filetobechanged.txt

Опция -i''редактирует файл в -месте (GNU/BSD sed ). Ваше слово в subfile.txtможет не содержать символов /, иначе вам придется замените /в команде символом, отсутствующим в слове (, например. @или ,).

1
28.04.2021, 23:20

Если вы не заботитесь о сохранении пробелов между полями, это будет работать с использованием любого awk в любой оболочке на каждом компьютере UNIX и с любыми символами в любом входном файле, поскольку он просто выполняет буквальное присваивание строки:

awk 'NR==FNR{new=$0; next} NR==2{$2=new} 1' subfile.txt filetobechanged.txt

Если тебе не все равно, то:

awk 'NR==FNR{new=$0; next} NR==2{sub(/[^[:space:]]+$/,""); $0=$0 new} 1' subfile.txt filetobechanged.txt

Чтобы заменить X-е слово в Y-й строке с помощью GNU awk для соответствия 3-го аргумента():

awk -v x=5 -v y=3 '
    NR==FNR { new=$0; next }
    FNR==y {
        match($0,"([[:space:]]*([^[:space:]]+[[:space:]]+){"x-1"})[^[:space:]]+(.*)",a)
        $0 = a[1] new a[3]
    }
1' subfile.txt filetobechanged.txt

напр.:

$ cat subfile.txt
[[[ \1 ~`!@#$%^&*()_-+={[}]|\:;"'<,>.?/ ]]]

$ cat filetobechanged.txt
Now is the winter of our discontent
Made glorious summer by this sun of York;
And all the clouds that lour'd upon our house
In the deep bosom of the ocean buried.

$ awk -v x=5 -v y=3 '
    NR==FNR { new=$0; next }
    FNR==y {
        match($0,"([[:space:]]*([^[:space:]]+[[:space:]]+){"x-1"})[^[:space:]]+(.*)",a)
        $0 = a[1] new a[3]
    }
1' subfile.txt filetobechanged.txt
Now is the winter of our discontent
Made glorious summer by this sun of York;
And all the clouds [[[ \1 ~`!@#$%^&*()_-+={[}]|\:;"'<,>.?/ ]]] lour'd upon our house
In the deep bosom of the ocean buried.

Если вы хотите сделать что-то подобное с sed, см.https://stackoverflow.com/q/29613304/1745001.

1
28.04.2021, 23:20

Теги

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