2

У меня есть несколько файлов в иерархии каталогов. Для каждого файла я хотел бы добавить "abcdef" в начало, в отдельной строке, и "ghijkl" в конец, в отдельной строке. Например, если файлы изначально содержали:

# one/foo.txt
apples
bananas

# two/three/bar.txt
coconuts

Затем я ожидал, что они будут содержать:

# one/foo.txt
abcdef
apples
bananas
ghijkl

# two/three/bar.txt
abcdef
coconuts
ghijkl

Какой лучший способ сделать это?

Я получил, насколько:

# put stuff at start of file
find . -type f -print0 | xargs -0 sed -i 's/.../abcdef/g'

# put stuff at end of file
find . -type f -print0 | xargs -0 sed -i 's/.../ghijkl/g'

но я не могу понять, как вставить эллипсы.

3 ответа3

2

Это не работа для sed . Чтобы добавить строки, просто используйте перенаправление ввода / вывода .

Для одного файла с именем filename вы можете сделать следующее:

mv filename temp
(echo abcdef ; cat temp ; echo ghijkl) > filename
rm temp

Чтобы сделать это автоматически для всех файлов в текущем каталоге, используйте find и xargs:

find -type f -print0 | xargs -0 -I % sh -c '
    mv "%" temp
    (echo abcdef ; cat temp ; echo ghijkl) > "%"
'
rm temp
2

Если у вас есть GNU sed, вы можете использовать конструкции i\ и a\ :

Используйте адреса строк для применения к первой и последней строке соответственно:

find . -type f -print0 | xargs -0 sed -i -e '1i\abcdef' -e '$a\ghijkl'
-1
For files in directory as file
echo "abcde" && cat file && echo "fghijk" > file

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .