Существует несколько решений. Принятие Вас не имеет имени файла, запускающегося с -
ls -li | grep " -"
ls -li | awk '/ -/'
Если каталог содержит -
, это может быть зафиксировано
ls -li | grep "[0-9][0-9]* -"
ls -li | awk '$2 ~ "-.{9}"'
Так как у вас было решение Perl, вот другой. Я использую Rep.txt
для хранения замены:
$ perl -pe '$re=`cat rep.txt`; chomp($re); s/%SUBSTITUTE%\n/$re/' file.txt
foo
bar
multi
line
string
foo
, который читает каждую строку целевого файла ( file.txt
), затем применяет скрипт, указанный - E
к нему и печатаю ( -P
).
Я нашел следующее решение, основанное на awk
:
text=`cat "filepaste"`
export text;
<"$file" awk '
BEGIN {REPLACE=ENVIRON["text"] "\n%SUBSTITUTE%" }
{gsub(/^%SUBSTITUTE%$/, REPLACE); print}
'
здесь «FilePaste» содержит контент для замены % заменителей%
. Преимущество состоит в том, что эта строка может быть выполнена при использовании различных инструментов оболочки без необходимости сохранить его обратно в файл.
Чтение AWK
Переменная Заменить
из переменной среды избегает расширения скрепленных символов в текста
.
Вот еще один способ с использованием ED
.
Вставьте все содержание в файла
перед маркером (то есть до линии, содержащей %, заменяют%
):
ed -s originalfile <<< $'/%SUBSTITUTE%/- r FILE\nw\nq'
Где:
/% заменитель% /
: наборы Адрес на первом сопоставлении строки % Заменяет%
-
или -1
: Офселы Обратитесь к одной строке до
r Файл
: Считается файл адресованная линия.
W
: пишет на ОригиналFile
(заменить с , p
, чтобы просто распечатать содержимое вместо записи)
q
: Выход для редактора
Замена файла
С ! Echo «$ Text»
вставит содержимое $ Text
перед маркером:
export TEXT
ed -s originalfile <<'IN'
/%SUBSTITUTE%/-1 r !echo "$TEXT"
w
q
IN
Если у вас есть версию GNU SED, вы сможете использовать команду R
для чтения и вставки нового контента из файла, затем удалить линию маркера E.G.
sed '/%SUBSTITUTE%/{
r path/to/newcontent
d
}' file
Если вы хотите сохранить изменение % Marker%
Marker после вставку, это сложно, потому что все, что вы делаете, GNU R
очереди расширения Содержание файла До конца конца нынешнего цикла шаблона (сохраняя его до , просто было бы вопросом удаления команды d
). Вероятно, самый простой способ - добавить его в файл NewContent
: вы могли бы сделать это на лету, как
sed '/%SUBSTITUTE%/{
r /dev/stdin
d
}' file < <(sed '$a %SUBSTITUTE%' path/to/newcontent)
, принимая совершенно другой подход, вы можете разделить первый файл на % заменителя%
А потом кошка в новом контент
csplit -s file '/%SUBSTITUTE%/'
cat xx00 newcontent xx01
Вы также можете сделать Bash , прочитайте
цикл по линии первого файла, и кота нового файла содержимого при соответствующем строке маркера - однако я ' У меня были мои костяшки, поступающие за предложение о чтениях петлей для обработки текста на этом форуме. К сожалению, не предоставляет установленное решение.