
Я хочу использовать tac
для переворота текстового файла посимвольно. На странице информации о coreutils я нашел пример: #Переворот файла посимвольноtac -r -s 'x\|[^x]'
Однако запуск, tac -r -s
похоже, открывает стандартный ввод вместо печати файла. Что это 'x\|[^x]'
значит и что мне делать?
Я также заметил, что выходные данные для tac [file]
и tac -r [file]
одинаковы, и они такие же, как cat [file]
. Все еще не могу разобраться с обратным посимвольным преобразованием.
решение1
Чтобы посимвольно перевернуть файл с помощью tac
, используйте:
tac -r -s 'x\|[^x]'
Это задокументировано вinfo tac
:
# Reverse a file character by character. tac -r -s 'x\|[^x]'
-r
заставляет разделитель рассматриваться как регулярное выражение.-s SEP
использует SEP
в качестве разделителя. x\|[^x]
— это регулярное выражение, которое соответствует каждому символу (как x
, так и не x
).
$ cat testfile
abc
def
ghi
$ tac -r -s 'x\|[^x]' testfile
ihg
fed
cba%
$
tac file
не то же самое, что и cat file
, если только не file
имеет только одну строку. tac -r file
то же самое, что и , tac file
поскольку разделителем по умолчанию является \n
, что одинаково при обработке как регулярного выражения и нет.
решение2
Если вас не беспокоитLF-характер(см. комментарии mosvy), то гораздо эффективнее его использовать , rev
чем tac -r -s 'x\|[^x]'
передавать по трубопроводу tac
при необходимости.
$ cat testfile
abc
def
ghi
$ rev testfile
cba
fed
ihg
$ rev testfile|tac
ihg
fed
cba
Это решение намного дешевле, tac -r -s 'x\|[^x]'
поскольку регулярные выражения, как правило, существенно замедляют работу.