SED вставить содержимое файла, а не имя файла - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть два файла, и я хотел бы вставить содержимое одного файла в другой, заменив указанную строку.

Файл 1:

abc
def
ghi
jkl

Файл 2:

123

Следующий код - это то, что у меня есть.

file1=numbers.txt
file2=letters.txt
linenumber=3s
echo $file1
echo $file2
sed "$linenumber/.*/r $file1/" $file2

Что приводит к выводу:

abc
def
r numbers.txt
jkl

Вывод, на который я надеюсь:

abc
def
123
jkl

Я думал, что это может быть проблема с переменными bash, но я все равно получаю тот же вывод, когда я вручную вводю информацию.

Как я неправильно понимаю sed и / или команду чтения?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Ваш скрипт заменяет строку строкой "r $file1".Часть в sed в s команде не интерпретируется как команда, а воспринимается буквально.

Вы можете:

linenumber=3
sed "$linenumber"' { 
        r '"$file1"'
        d
}' "$file2"

Считать строку № 3, распечатать файл1 изатем удалите строку.

См. здесь для хорошего объяснения и справки.

Конечно, мы можем сделать это односторонним:

sed -e "$linenumber"' { r '"$file2"$'\n''d; }' "$file1"

Жизньпример на уроках .

0 голосов
/ 26 сентября 2018

Я бы использовал команду c следующим образом:

linenumber=3
sed "${linenumber}c $(< $file1)" "$file2"

Это заменяет текущую строку текстом, который следует после c.


Ваша команда нене работает, потому что расширяется до этого:

sed "3s/.*/r numbers.txt/" letters.txt

, и вы не можете использовать r таким образом.r должна быть команда, которая выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...