Из комментария OP:
Выпущенный, что установка, по некоторым причинам, разрозненные данные на всем протяжении диска. Я восстановил
cat /dev/zero > /mounted_drive/zero
после установки и затем удаленный файл и восстановилdd
, оказавшийся файл на 1.3 ГБ послеgzip
.
С этим на вопрос эффективно отвечают (и, как побочный эффект, удаленный из Оставшейся без ответа очереди Вопросов).
В вашем связанном вопросе уже хорошо AWK
Ответ, просто измените его немного с помощью Printf
вместо Print
Чтобы вставить содержимое без новой строки:
awk '/First/ { printf $0; getline < "File1.txt" }1' infile.txt
Результат:
Some Text here
FirstThis is text to be inserted into the File.
Second
Some Text here
Вы можете добавить пространство или другой делиметр после «первого» с printf $ 0 ""; ...
Если вставленный файл имеет много строк, то:
awk '/First/{printf $0; while(getline line<"File1.txt"){print line};next}1' infile.txt
Результат:
Some Text here
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
]
Second
Some Text here
Если вы находитесь , вошли в локальный компьютер , вы будете использовать SCP
, как это:
scp /home/username/some.xml root@remote.machine.ip.address:/path/to/directory/
, если вы , вошли в удаленный компьютер (как В ОП) используйте SCP
, как это:
scp username@local.machine.ip.address:/home/username/some.xml /path/to/directory
замените IP-адреса по указанию в командах.
-121--42162- Так было бы немного сложно сделать эту работу портативно в SED
- вы должны смотреть на , вырезать
и / или
При некоторых предшественниках Regex создают свой скрипт в этом контексте - и это связано с SED
, всегда будет вставлять \ N
EWLINE до . Выход R
EAD. Тем не менее, W / GNU SED
:
sed '/First/{x;s/.*/cat file/e;H;x;s/\n//}' <<\IN
First
Second
Third
IN
, который работает E
Xecuting CAT
Каждый раз, когда он сталкивается с вашим / первым /
адресом. Это делает это в h
H H (в любом случае - альтернативный буфер - потому что я е x
Измените их, это на самом деле происходит в шаблоне пространства, который используется для H
Старое пространство) Для сохранения содержимого соответствия линии сначала
, а затем добавляются CAT
вывод на вашу строку и удаляет вмешательство \ N
Ewline.
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
]
Second
Third
Теперь, если вы хотите, если вы хотите, чтобы все содержимое файла в соответствии со между в две части линии, которая должна работать немного по-другому, потому что с вышеупомянутой командой я просто удаляю трейлинг Newline между концом соответствующей линии и начало файла. Тем не менее, вы можете сделать это тоже:
sed '/First/{s//&\n/;h
s/.*/{ cat file; echo .; }/e;G
s/\(.*\).\n\(.*\)\n/\2\1/
}' <<\IN
Third
Second
First Second Third
Third
Second
First Second Third
IN
, который разбивает линию в матче с \ N
символом EWLINE, сохраняет его в H
, E
Xecutes CAT
CAT
- который заменяет пространство шаблонов с его выходом - G
ETS. Содержимое пространства удержания, добавленное к нашему новое пространство шаблона, следующее за другим \ N
EWLINE Персонаж, а затем переставляет на \ N
разделители EWLINE.
Я делаю Echo.
Чтобы сохранить любые трейлинг \ N
символов EWLINE в файле
- но если это не ваше желание (и все равно не очень актуальны для вашего примера) Вы можете обойтись без него и удалить первый .
До . \ N
в следующем ///
Ubstitution.
Незадолго до того, как пространство шаблона перестройки выглядит так:
^cat's output - any number of newlines.*.\nmatch on First\nrest of match$
Third
Second
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
] Second Third
Third
Second
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
] Second Third
Вы могли бы использовать Perl
(получите содержимое файла и замена Pattern
с с Pattern
+ Содержание файла
):
perl -pe '$text=`cat insert.txt`; chomp($text); s/PAT/$&$text/' file.txt
Добавить -I
для редактирования на месте; G
Чтобы добавить после каждого происшествия PAT (шаблона), например:
perl -i -pe '$text=`cat insert.txt`; chomp($text); s/PAT/$&$text/g' file.txt
другой способ, используя ED
:
printf '%s\n' /PAT/s/PAT/\&\\ \/ - kb ". r insert.txt" j \'b j ,p q | ed -s file.txt
для редактирования на месте, заменить , p
с W
W :
printf '%s\n' /PAT/s/PAT/\&\\ \/ - kb ". r insert.txt" j \'b j w q | ed -s file.txt
, вероятно, никто не заинтересован, как это работает, но в любом случае, Printf
передает список команд ED
:
/PAT/s/PAT/&\ # set address to first line matching PAT and
/ # split the line right after PAT
- # set address one line before (return to the line matching PAT)
kb # mark the current line
. r insert.txt # insert content of insert.txt after this line
j # join current line and the next
'b # set address to marked line (return to the line matching PAT)
j # join current line and the next one
,p # print file content
q # quit editor
или , без использования printf
и :
:
ed -s file.txt <<< $'/PAT/s/PAT/&\\\n/\n-\nkb\n. r insert.txt\nj\n\'b\nj\nw\nq\n'