Динамично сошлитесь на имя файла

[

]Из книги рецептов Upstart, []Изменение оболочки по умолчанию[]. Есть 3 варианта, первые 2 включают изменение оболочки по умолчанию с []/bin/sh[] на что-то другое. Но 3-я опция выглядит так, как будто она решит вашу конкретную проблему.[

] [

][]excerpt[][

] [

] [

]Use a "here document" (предполагая, что выбранная вами оболочка поддерживает их) в файлах конфигурации задания, которые вы хотите запустить с другими shell:[

] [
][]скрипт
/бин/бэш 

эхо "Привет - я бегу под оболочкой башни"

дата

эхо "и я тоже :)"

EOT
конечный скрипт
[][
] [

]

1
08.02.2015, 19:46
4 ответа

Попробуйте:

perl -i.bak -wpe 's/SEARCH_FOR/$ARGV/g' *.txt

$ARGV при чтении из <> содержать имя текущего файла.

Так как вы используете переключатель -i, то при запуске perl с переключателем -n или -p вам не нужно беспокоиться о последствиях для безопасности -p.

1
27.01.2020, 23:37

Если вы просто хотите сделать это в скорлупе, используйте команду find для списка файлов и затем команду basename для получения имени файла и используйте sed для замены строки

for i  in $(find . -type f); do fname=$(basename $i); sed -i "s/TestRelation/${fname}/" $fname; done

Well. basename and find is no required and you can just use ls if you are sure of only files in a particular dir you're search

and find and you can just use ls if you are sure of only files in a particular dir you search

.
0
27.01.2020, 23:37

Сценарий оболочки с «здесь документом« здесь »будет справиться с этим:

#!/bin/bash
for NAME in t?
do
ex -s $NAME << END_EDITS
1s/TestRelation/$NAME/
w!
q
END_EDITS
done

Не зная, что названы ваши файлы, я выбрал« T1 »,« T2 »,« T3 »и ​​т. Д. В качестве имени файлов. Вам придется генерировать имена файлов в целом.

LOOP «для» дает имя оболочки имя значение имени файла каждый раз через петлю. Экземпляр Bash , выполняющий вышеуказанный скрипт, вызывает редактор Ex на каждом имени файла и дает ему некоторые входные строки. Команда 1s / testrealation / $ name / EX - Ex расширяется экземпляром Bash , что заменит имя файла для детали «$ name».

Вы должны иметь токен, который заканчивается «здесь документ» ( End_edits в этом случае) в начале строки, нет белого пространства спереди.

1
27.01.2020, 23:37

Вы можете попробовать что-то вроде этого.

Для I в `ls * .sh` Do Echo "$ I" >> $ I.new; cat $ i.new $ i >> $ I.new; Готово

Что это делает в основном перечислять файлы и хранить имена файлов. Напишите те имена в новом файле и кошайте его с исходным файлом. Вы также можете переместить файл .new в исходное имя файла, если это необходимо. Это не самый элегантный вариант, но он работает.

0
27.01.2020, 23:37

Теги

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