Я знаю, как редактировать файл с помощью sed по шагам, но как мне создать настоящий скрипт sed, а затем использовать его в файле, чтобы делать то же самое, что делают отдельные команды sed? Например, эти 3 команды sed:
sed -i '4i\ ' baconFile
sed -i 's/,/\t\t/' baconFile
sed -i 's/,/ /' baconFile
решение1
Помещение команд в файл
Поместите эти строки в файл скрипта с именем script.sed
.
4i\
s/,/\t\t/
s/,/ /
Затем запустите его следующим образом:
$ sed -i -f script.sed baconFile
Создание автономного скрипта sed
если вы хотите, чтобы это был один исполняемый файл, то сделайте следующее:
#/bin/bash
sed -i '
4i\
s/,/\t\t/
s/,/ /
' "$@"
Поместите приведенные выше строки в файл с именем script.bash
, сделайте его исполняемым ( chmod +x script.bash
и запустите его следующим образом:
$ script.bash baconFile
Создание файла скрипта
Вы можете использовать этот метод для создания файла, о котором я упоминал выше.
$ cat > script.bash <<EOF
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
EOF
Это создаст файл скрипта. Вы можете подтвердить это с помощью этой команды:
$ cat script.bash
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
решение2
sed -i '4i\
s/,/\t\t/
s/,/ /' baconFile
sed работает как большинство интерпретаторов, несколько команд могут располагаться на отдельных строках или разделяться точкой ;
. Если у вас нет GNU sed
первой строки, это может привести к ошибке.
Чтобы создать скрипт sed, просто укажите абсолютный путь к интерпретатору sed в вашем shebang и убедитесь, что файл является исполняемым.
#!/bin/sed -f
s/foo/bar/
chmod u+x foo
./foo <<<foo
bar
или скрипт можно вызвать вместе с командой sed.
sed -i -f foo file
решение3
Вам нужна -f
опцияsed -f sed-script
решение4
Вы можете написать скрипт оболочки bash или korn, чтобы сделать это. Если вы хотите сделать его динамическим, вы можете сделать так, чтобы он принимал имя файла в качестве параметра, и вы можете запускать эти команды sed для любого файла, который вам нужен.
Создайте новый файл, скажемupdatefile.sh
#!/bin/bash
#$1 is the first parameter being passed when calling the script. The variable filename will be used to refer to this.
filename=$1
sed '4i\ ' filename
sed 's/,/\t\t/' filename
sed 's/,/ /' filename
Затем вы можете запустить updatefile.sh baconFile
, который выполнит все три команды sed для файла baconFile
.
Также g
опция в sed обновит все вхождения переменной в файле. Например:
sed 's/,/ /g' filename