По существу мне дают текстовый файл и, как предполагается, завинчиваю с ним через команды sed. Я имею приблизительно 7 общих количеств команд sed и должен поместить их всех в один сценарий оболочки для создания вывода ТОГО, когда этот скрипт запущен.
Текстовый файл, который будет завинчен с: students.txt
Students.txt:
DogG DOGGGGGGGG
dog dog dog Jamesb
JamesBrady
derghnregnrig
JamesBeody
Таким образом, первый sed избавляется от первой и последней строки. второй sed заменяет собаку третью DOGGGG sed, находит и печатает все строки w/JamesBrady, четвертый sed находит и печатает все строки с derghnregnrig
Команды Sed (примеры БАКАЛАВРА НАУК):
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
Я предполагаю, что Вы на самом деле хотите видеть строку с DOGGGG, так как Вы редактируете его (иначе, почему беспокойство?)
Использование {} группе управляет в блоке...
sed -n '{
1d
$d
/^$/d
s/dog/DOGGGG/g
/DOGGGG/p
/JamesBrady/p
/derghnregnrig/p
}' students.txt
результат:
DOGGGG DOGGGG DOGGGG Jamesb
JamesBrady
derghnregnrig
Вам не нужно все это для Вашего примера...
sed -n '{
1d
$d
s/dog/DOGGGG/g;p
}' students.txt
, но я предполагаю, что Ваш реальный файл действительно имеет пустые строки и материал в середине, которую Вы не хотите печатать.
Опция 1: поместите каждый sed
команда в Вашем сценарии оболочки на отдельной строке и сделайте, чтобы они управляли на месте использованием переключатель-i.
Опция 2: используйте сингл sed
командная строка в Вашем сценарии оболочки, но передайте каждое выражение с помощью отдельного переключатель-e.
Опция 2 предпочтена, если Ваши выражения ортогональные (то есть, они не воздействуют на те же соответствия).
В первую очередь, проверьте те команды sed, они не могут делать то, что Вы хотите. Например, второй, вместо
sed -n s/dog/DOGGGG/g students.txt
Я думаю, что это должно быть
sed -i 's/dog/DOGGGG/g' students.txt
Читать man sed
и удостоверьтесь, что они индивидуально работают перед созданием сценария.
Сделайте новый файл (т.е. нано 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 в этой последней команде, если у Вашего пользователя нет разрешения изменить students.txt.