Как добавить строку ко всем файлам в каталоге?

Комментарий Тома Ханта уже должен ответить на ваш вопрос, но на всякий случай, если ваш dhcpcd не сможет самостоятельно исследовать доступные интерфейсы (что уже является проблемой), вы можете написать простую однострочку, как это: sudo dhcpcd $ (ip l | sed -n 's/. *\( enp0s20u [0-9] *\):. */\1/p')

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

-121--145324-

Вот сценарий в perl , который делает это. Выполнение только команд прокладки трубопроводов в командной строке невозможно или невозможно. Наивный подход был бы

perl -npe 's/\b|\s+/\n/g' < My.java | grep '^[A-Z]\+_[A-Z_]\+'

, но сценарий ниже лучше:

#!perl -w
my $content = do { local $/; <> };
my @tokens = split /\b|\s+/, $content;
my $n = 0;
my $skip;

foreach (@tokens) {
    $n++; $skip = 0;
    next if /\s+/;
    next if /"/ ... /"/;    # skip strings
    next if /\(/ .. /\)/;   # skip parameters
    next if /@/ .. /^\w+$/; # skip annotations
    $skip ||= 1  if $n == 1 .. /\benum\b/; # skip from beginning to enum
    $skip ||= 1  if /enum/ .. /\{/; # skip to open bracket
    next if $skip;
    last if /\}/;

    print $_, "\n";
}

-121--243364-

Вы вообще не можете. Mac OS X обычно не учитывает регистр.

На самом деле это настройка для каждого раздела, AFAIK устанавливается при форматировании раздела. Если вы решите, что вам это нужно, я предлагаю создать образ диска с учетом регистра для хранения этих файлов.

(Вы также можете узнать о другом сайте в сети Stack Exchange, Спросите другое - предполагая, что вы еще не слышали о них)

7
08.05.2018, 15:19
3 ответа

Использование GNUsed:

for sql in backup/*.sql; do
    sed -i '1i\use my_db;' "$sql"
done

Со стандартнымsed:

for sql in backup/*.sql; do
    sed '1i\
use my_db;
' "$sql" >"$sql.bak" && mv "$sql.bak" "$sql"
done

Это будет выполнять редактирование в -месте каждого .sqlфайла в backup. Команда редактирования вставляет строку перед первой строкой в ​​каждом файле.

Предполагается, что шаблон backup/*.sqlсоответствует только тем файлам, которые вы хотите отредактировать.


Использование echoиcat:

for sql in backup/*.sql; do
    { echo 'use my_db;'; cat "$sql"; } >"$sql.tmp" && mv "$sql.tmp" "$sql"
done

В этом цикле мы сначала выводим строку, которую хотим добавить в начало файла, а затем содержимое файла. Это переходит во временный файл, который затем переименовывается.


Команда

echo 'use my_db;' >> backup/*.sql

расширится до чего-то вроде

echo 'use my_db;' >> backup/file1.sql backup/file2.sql backup/file3.sql

, что совпадает с

echo 'use my_db;' backup/file2.sql backup/file3.sql >> backup/file1.sql

, который добавит заданные строки к backup/file1.sql.

Ваша вторая команда не будет изменять никакие файлы.

18
27.01.2020, 20:15

Решение

sed -i '1 i\use my_db' backup/*.sql

Пояснение

sed -iСохраните изменения в файлах, не записывайте их в stdout.

1-Когда sedнаходится в первой строке.

i-Вставьте следующую строку.

backup/*.sqlФайлы, для которых sedбудет выполняться.

11
27.01.2020, 20:15

Вы можете просмотреть каждый файл в этой папке.

for item in $(ls backup/ | grep "*.sql")
do
echo "use my_db;" >> $item
done
-3
27.01.2020, 20:15

Теги

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