tar
похож на zip-файл, который хранит множество других файлов, но не сжимает их. bzip2
сжимает файл, но только по одному за раз. Файл .tar.bz2
, вероятно, указывает на то, что группа файлов была помещена в tar
и впоследствии заархивирована. Вы не можете соединить их молнией, не засыпав их в первую очередь.
Ваша ошибка связана с тем, что ваш файл .tar.bz2
поврежден. См. Ниже пример правильно работающего файла.
$ ls
test_file.tar.bz2
$ tar xvjf test_file.tar.bz2
test_file
$ ls
test_file test_file.tar.bz2
РЕДАКТИРОВАТЬ
В приведенном выше примере в tar-архиве был только один файл. Если вы хотите заархивировать только эту папку:
$ bzip2 test_file
$ ls
test_file.bz2
Мы все еще можем только догадываться, как обращаться со знаками препинания, поэтому такие случаи, как open, close
, где есть два слова, но они семантически разделены… не включены (замены не происходит! ).
Пока для меня следующие работы:
$ cat test.txt
open
open door
open blue door
can you open door
the door is open
$ sed -E 's/\<open([[:space:]]+[[:alnum:]]+)/x\1/g;s/\<open[[:space:]]*$/l/g' test.txt
l
x door
x blue door
can you x door
the door is l
Используя примеры данных, которые вы указали в вопросе:
$ sed -E -e 's/\<open([[:space:]]+)\</x\1/g' -e 's/\<open\>/l/g' file
l
x door
x blue door
can you x door
the door is l
Это применяет две sed
замены к каждой строке. Первая замена соответствует слову open
, за которым следует любое количество пробелов или знаков табуляции, и начало -шаблона слова -(\<
).Он заменяет это на x
и на то, сколько пробелов или вкладок было найдено. Это заменяет open
, если оно предшествует слову.
Вторая замена заменяет любое оставшееся слово open
на l
.