Кажется, работает для меня таким образом:
sed '/foo/{/bar/!d;}' my_file
Вы можете использовать '@', например:
$ files=( /tmp/a "/tmp/a file from windows" /tmp/myfile )
$ cat "${files[@]}" > newfile
'@' расширяет все содержимое массива. Он похож на *
, за исключением того, что он обрабатывает каждый элемент по отдельности, тогда как *
объединяет все элементы как один.
Это тривиально с zsh
.
% echo blah > a; echo asdf > b; echo harfjr > c;
% filenames=(a b c d e)
% print -l $filenames[1,3]
a
b
c
% cat $filenames[1,3]
blah
asdf
harfjr
% cat $filenames[1,3] > anewfile
% cat anewfile
blah
asdf
harfjr
% somenum=2
% print -l $filenames[1,$somenum]
a
b
%
Если оболочка на самом деле bash
или ksh
э-э, не знаю.
Самый простой способ сделать это:
$ for i in {1..3}; do cat inputfile$i>>outputfile; done