Поместите все команды sed в один файл сценария оболочки

По сути, мне предоставлен текстовый файл, и я должен использовать его с помощью команд sed. У меня есть около 7 команд sed total и нужно поместить их в один сценарий оболочки, чтобы вывести ONE-выход, когда этот скрипт запущен.

Текстовый файл, который нужно завинтить с помощью: students.txt

[d2 ] Students.txt:

DogG DOGGGGGGGG
dog dog dog Jamesb
JamesBrady
derghnregnrig
JamesBeody

Итак, первое седло избавляется от первой и последней строки. второй sed заменяет собаку с помощью 3D-поиска DOGGGG и печатает все строки с четвертым седлом JamesBrady и печатает все строки с помощью команд derghnregnrig

Sed (примеры BS):

sed -e '1d' -e '$d' -e '/^$/d' students.txt
sed -n s/dog/DOGGGG/g students.txt
sed -n /JamesBrady/p students.txt
sed -n /derghnregnrig/p students.txt

над командами sed все должны входить в один файл сценария оболочки, и когда запуск должен выводить его (кумулятивные?) эффекты на один текстовый файл (students.txt)

До сих пор я пытался посмотрите правильную процедуру для этого и не встретите ничего, кроме путаницы. Может ли кто-нибудь объяснить в ясности и с терпением новичка, как несколько команд sed и любые команды (awk, grep и т. Д.), Если на то пошло, должны вписываться в один файл сценария оболочки?

Использование Ubuntu 16.04, Vim. Bash shell

1
задан 11 October 2016 в 15:28

2 ответа

Прежде всего, проверьте эти команды sed, они могут не делать то, что вы хотите. Например, второй, а не

sed -n s/dog/DOGGGG/g students.txt

Я думаю, что это должно быть

sed -i 's/dog/DOGGGG/g' students.txt

Прочитайте man sed и убедитесь, что они индивидуально работают, прежде чем создавать свой скрипт .

Создайте новый файл (т.е. nano yourscript.sh) и напишите #!/bin/bash, а затем ваши команды sed, заменив students.txt на $1. Этот $1 представляет первый аргумент при вызове скрипта:

#!/bin/bash
sed -e '1d' -e '$d' -e '/^$/d' $1
sed -n s/dog/DOGGGG/g $1
sed -n /JamesBrady/p $1
sed -n /derghnregnrig/p $1

С правильными командами sed. Теперь дайте разрешения на выполнение сценария:

sudo chmod 755 yourscript.sh

И запустите его, с именем файла в качестве первого аргумента:

sudo ./yourscript.sh students.txt

Вам нужна только sudo в этой последней команде, если ваш у пользователя нет разрешения на изменение student.txt.

3
ответ дан 23 May 2018 в 05:18

Вариант 1: поместите каждую команду sed в ваш сценарий оболочки на отдельной строке и попросите их работать на месте с помощью ключа -i.

Вариант 2: используйте одну командную строку sed в вашем сценарии оболочки, но передайте каждое выражение, используя отдельный переключатель -i .

Вариант 2 предпочтителен, если ваши выражения ортогональны (то есть они не работают с одинаковыми совпадениями ).

0
ответ дан 23 May 2018 в 05:18

Другие вопросы по тегам:

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