Как написать сценарий оболочки с помощью терминала?

Используйте \b или \s и ^

\b для поиска границ слов, и ^ для поиска начала строки:

sed -i '/^test\b/d' file.txt

Вместо \b используйте \s для поиска символа пробела, если ваши колонки разделены пробелами.

Достаточно ли sed?

Да.


Далее следует краткое упоминание (большинства) других "обычных подозреваемых" в обработке текста командной строки:

В качестве альтернативы, иногда я использую grep для аналогичных целей, особенно если я просто хочу поработать с копией файла, перенаправить вывод или передать вывод другой утилите:

grep -v '^test\b' file.txt 

или используя -w подбор слов:

grep -vw '^test' file.txt

Оба вывода:

ID       VALUE
testing  value_2
first    value_3
second   value_4

Есть много других более мощных опций, доступных после перехода на скриптовые языки более высокого уровня. awk является хорошим промежуточным вариантом и хорошо справляется с табличным вводом, например, таким как:

awk 'NR > 1 && $1 != "test" { print $1,":",$2 }' test.txt

NR > 1 пропускает первую (заголовочную) строку, а $1 != "test" использует простое сравнение строк вместо регекса (хотя вместо него можно использовать !/^test /). Блок { print ... } выводит первый и второй столбцы, разделенные двоеточием (произвольно, просто чтобы показать вам немного возможного):

testing : value_2
first : value_3
second : value_4

так что awk - хороший инструмент для изучения. После этого вы попадаете в сферу полноценных языков программирования, таких как Perl, Python и др. Их можно использовать как для написания одной фразы, так и для создания гигантских программных комплексов.

0
25.11.2018, 09:33
3 ответа

Попробуйте следующую структуру:

$ cat > file.sh << "EOF"
echo Hello World, done
read num1
echo please enter the second number
read num2
echo Sum of $num1 and $num2 is `expr $num1 + $num2`
EOF

Linux с нуля использует этот метод для всего, от сценариев до создания файлов. Если doneпереопределяет EOF, рассмотрите возможность экранирования, как предлагает Спархок.

1
28.01.2020, 02:18

Самый простой способ создать текстовый файл (, который является сценарием оболочки )из интерактивной оболочки в терминале с использованием перенаправления, просто сделать

$ cat >filename

... а затем вставьте любой текст, который вы хотите, или начните вводить (используйте >>вместо >до добавьте к уже существующему файлу ). Когда закончите, нажмите Ctrl+D .

В качестве дополнительного бонуса оболочка не будет интерпретировать то, что вы вставляете или вводите в текстовый файл таким образом. Если бы вы использовали echoдля вставки отдельных строк или документ здесь -для вставки нескольких строк, вы должны были бы помнить о защите текста с помощью правильного использования кавычек, чтобы предотвратить расширение переменных, escape-последовательностей и т. д. в оболочке в содержание документа.

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

cat <<'END_SCRIPT' >filename
script
goes
here
END_SCRIPT

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

1
28.01.2020, 02:18

tldr; оболочка интерпретирует символы перед добавлением в файл.

echo echo Hello World, "done" >> file.sh

Оболочка интерпретирует ", удаляя их из стандарта из echo. Следовательно, вам нужно либо убежать от них,

echo echo Hello World, \"done\" >> file.sh

или, проще говоря, заключить все это в '.

echo 'echo Hello World, "done"' >> file.sh`

Сказав это, я не уверен, что вы имеете в виду под

to make sure that when I run the file, the terminal doesn't consider the keyword "done"

doneпосле echoничего не значит. Новый скрипт просто напечатает литерал done. Просто проверьте это!

Аналогично, для

echo $num1 plus $num2 is `expr $num1 + $num2`

оболочка интерпретирует переменные иexprперед добавляет к файлу. Опять же, просто заключите все в '.

echo 'echo $num1 plus $num2 is `expr $num1 + $num2`' >> file.sh

Сказав это, я понятия не имею, зачем вам это. Просто используйте текстовый редактор. Это будет неудобно, когда вы хотите, чтобы в вашем сценарии были буквальные 's.

2
28.01.2020, 02:18

Теги

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