Что представляет собой практический способ перечислить каждый символ, используемый в файле (Bash) (Regex)

Openoffice / Libreoffice может сделать трюк с расширением pdf-импорта и макросом с разбивкой по страницам.

Не идеальное решение, но оно работает для меня (кроме использования PDF Mod - что я бы настоятельно рекомендовал ).

1
задан 3 April 2015 в 18:09

3 ответа

Вы можете печатать каждый символ файла в отдельной строке с помощью fold -w1, затем сортировать вывод и исключать дубликаты с помощью sort -u (или sort | uniq):

$ cat test 
Johnny's penguin, (Tuxie), likes the following foods: French fries, and beef.
$ fold -w1 test | sort -u

,
:
.
'
(
)
a
b
c
d
e
f
F
g
h
i
J
k
l
n
o
p
r
s
t
T
u
w
x
y

Затем вы можете снова включить это в одну строку, например, с помощью paste -sd "" -:

$ fold -w1 test | sort -u | paste -sd "" -
 ,:.'()abcdefFghiJklnoprstTuwxy
8
ответ дан 23 May 2018 в 21:47

О, весело! Вот несколько способов. Простейший (fold) уже задан, но вот способ его расширения, чтобы дать счеты для каждого символа:

$ fold -w 1 file | LC_ALL=C sort  | uniq -c
 11  
  2 "
  1 '
  1 (
  1 )
  3 ,
  1 .
  1 :
  1 F
  1 J
  1 T
  1 a
  1 b
  2 c
  2 d
  9 e
  4 f
  2 g
  4 h
  5 i
  1 k
  3 l
  7 n
  6 o
  1 p
  2 r
  4 s
  1 t
  2 u
  1 w
  1 x
  1 y

Использование LC_ALL=C устанавливает языковой стандарт в C для команды sort, что означает, что КАПИТАЛЫ сортируются до нижних регистрах по вашему запросу. Чтобы получить все это на одной строке без учета вхождений, но с тем же порядком сортировки, вы можете сделать

$ echo $(fold -w 1 file | LC_ALL=C sort -u | tr -d '\n')
"'(),.:FJTabcdefghiklnoprstuwxy

Вы также можете использовать Perl:

$ perl -lne '$k{$_}++ for split(//); END{print sort keys(%k)}' file
"'(),.:FJTabcdefghiklnoprstuwxy

Наконец , это способ, который также показывает специальные символы, такие как вкладки, символы новой строки и возврат каретки:

$ echo $(od -c file | grep -oP "^\d+ +\K.*" | tr -s ' ' '\n' | 
    LC_ALL=C sort -u | tr -d '\n')
"'(),.:FJT\n\r\tabcdefghiklnoprstuwxy
          ------
            |-------------> special characters
3
ответ дан 23 May 2018 в 21:47

Просто удалите повторяющиеся символы из входной строки. Функция set в python создаст набор элементов без каких-либо дубликатов. т.е. set('ssss') даст вам один s.

Через python3

$ cat file
Johnny's penguin, (Tuxie), likes the following foods: French fries, and beef.
$ python3 -c 'import sys
with open(sys.argv[1]) as f:
    for line in f:
        print("".join(sorted(set(line))))' file
 '(),.:FJTabcdefghiklnoprstuwxy

Если вы хотите удалить дубликаты символов, присутствующих в целом файле, вы можете попробовать это. [!d3 ]

$ python3 -c 'import sys
with open(sys.argv[1]) as f:
    print("".join(sorted(set(f.read()))))' file
2
ответ дан 23 May 2018 в 21:47
  • 1
    Будучи новичком, я искал метод с использованием Bash, но, несмотря на это, я сохраню ваш метод в случае, если я когда-либо изучу Python. Спасибо за ответ. Я также исправил свой вопрос, включив в него пробел, хороший улов! – TuxForLife 3 April 2015 в 07:14
  • 2
    В большинстве дистрибутивов Linux по умолчанию установлен python. Python - лучшая замена для инструментов bash. Изучите это быстро. – Avinash Raj 3 April 2015 в 07:16
  • 3
    Hrm, это напечатает символы, используемые в строке , в то время как вопрос задан в файле . – chx 3 April 2015 в 10:35
  • 4
    @chx хороший улов, проверьте мое обновление .. – Avinash Raj 3 April 2015 в 10:44

Другие вопросы по тегам:

Похожие вопросы: