Ваш первый пример был близок, но Вы говорите sed
то, что Вы хотите взять 2 символа за один раз с \(.\)\(.\)
бит, чтобы сделать это с помощью группы получения Вы могли скорректировать его как так:
$ echo ahebhaaa | sed 's/\(.\)/\1\n/g'
a
h
e
b
h
a
a
a
Относительно почему sed
пример с &
работы. &
в поиске и замене то, чему когда-либо символы соответствовало регулярное выражение. Так все, что не было a \n
.
$ echo "123 abc" | sed 's/[0-9]*/&&/'
123123 abc
Первое &
печатает символы, которые были подобраны шаблоном ([0-9]*
), 123
. Второе &
печатает их во второй раз.
$ echo "123 abc" | sed 's/ab/&&&/'
123 abababc
Шаблон, который мы ищем, ab
. Поскольку мы обходим строку 123 abc
sed печатает неподобранные символы, 123
. Затем строка ab
встречен, который в той точке соответствия, что мы ищем и заменяем на. Так sed
затем замены это с 3 копиями какой подобранный (abbab
). Наконец sed
печать c
.
Нотация [^\n]
создает ряд не конец символа строки. Поэтому думайте sed
поскольку это идет по Вашей строке текста, ahebhaaa
, это тестирует каждый из этих символов, и высказывание "Является этим не a \n
"? Если это не конец символа строки, то sed
делает поиск и замену на этом символе и &
печать, что было подобрано, т.е. символ, наряду с символом новой строки. Это затем повторяет это, когда это идет ahebhaaa
строка.
Кодирование UTF-8 : : Файл
обычно дает вам кодировку:
файл - MIME-encoding myfile.txt
Обратите внимание, что это Может быть либо «US-ASCII», либо «UTF-8», в зависимости от того, находит ли он некоторые символы UTF-8, поэтому вам нужно будет принять оба.
Следующие пункты в основном требуют, чтобы вы проводят вывод в WC -L
(для подсчета количества строк вывода) и проверьте, будет ли это 0 или нет. В качестве альтернативы, они обычно должны иметь возвратную стоимость 0, если они что-то нашли, или 1, если нет (в этом случае ваши требования выполнены):
без задних белых пробелов : это работа для GREP
, Я думаю:
grep -e '\ s \ + $' myfile.txt
ньролайн в конце файла : если последний символ по Hexdump
или XXD
0A
, есть новая линия, и это нормально:
XXD -PS myfile.txt | хвост -N 1 | GREP '0A $'
( Обратите внимание, что, в отличие от других точек, обозначаемых здесь, вы хотите, чтобы это было что-то найти )
NO NO-ASCII CHARS : это так же, как «Кодировка UTF-8», за исключением, может быть, немного более строгого.
Если вы действительно Хотите убедиться, что в файле есть только символы ASCII (см. Ответ @ Anthon), вам, вероятно, понадобится что-то вроде
XXD -G1 myfile.txt | CUT-C 10-56 | GREP '[A-F89] [A-F0-9]'
Это поиск любых символов за пределами диапазона ASCII (0x00-0x7f). Это не очень элегантно, хотя.
LF для окончания линии : Файл
Без каких-либо вариантов сообщите вам что-то вроде
TEXT ASCII, с терминаторами линии CRLF
для скрипта, возможно, что-то вроде следующее может сделать :
xxd -g1 myfile.txt | CUT-C 10-56 | GREP '0D'
Кодировка UTF-8 : есть ICONV (1)
. По сути, требуется кодирование «от» ( -F
), кодировку «к» ( -T
) и файл.
Кодировка «для», вероятно, UTF-8
, тогда как кодировка «от» может быть получена с использованием файла
, как описано в верхней части моего поста:
File_Encoding = "$ (Файл - - mime-encoding myfile.txt) " iconv -f "$ file_encoding" -T 'utf-8' myfile.txt
Нет задних белых пробелов : Это задание для SED
, хотя я предпочитаю POSIX Way (то есть нет -I
Переключатель), который означает использование PrintF
+ EX
. В любом случае, Regex будет выглядеть что-то вроде S / \ S \ + $ // G
. Для POSIX-совместимого способа:
printf "%% s / \\ s \\ + \ $ // g \ nwq \ n" | ex -s myfile.txt
для несовместичного способа:
SED -I 'S / \ S \ + $ // G' myfile.txt
Новая линия в конце файла : Приложения UNIX обычно добавляют отсутствующую новую строку в конце файла, когда они его сохраняют. Чтобы использовать это, это немного взлома:
printf "wq \ n" | ex -s myfile.txt
( Это фактически просто открывается, сохраняет, выйти )
NO NO-ASCII CHARS : см. «Кодирование UTF-8» выше.
LF для окончания линии : есть DOS2UNIX (1)
. Это должно сделать именно то, что вам нужно.
Попробуйте команду file
, она уже делает хорошую работу по определению информации о содержимом, хотя и не анализирует полный файл данных.
Если у вас большой файл somefile
, в котором первый символ utf-8 не появляется до конца, то файл somefile
не распознает его как файл utf-8.