обратный файл символ за символом с помощью tac

обратный файл символ за символом с помощью tac

Я хочу использовать 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]'поскольку регулярные выражения, как правило, существенно замедляют работу.

Связанный контент