unix - выводит отдельный список управляющих символов в файл - PullRequest
2 голосов
/ 31 декабря 2011

Например, для входного файла, как показано ниже:

sid|storeNo|latitude|longitude
2|1|-28.03õ720000
9|2
10
jgn
352|1|-28.03¿720000
9|2|fd¿kjhn422-405
000¥0543210|gf¿djk39
gfd|f¥d||fd

Вывод (символы ниже могут появляться в любом порядке):

¿õ¥

Есть ли у кого-нибудь функция (awk, bash, perl.etc), которая может сканировать каждую строку, а затем выводить (в восьмеричном, шестнадцатеричном или ascii - либо в порядке) отдельный список управляющих символов (для простоты управляющих символов) быть найденными выше ascii char 126)?

Использование perl v5.8.8.

Ответы [ 4 ]

2 голосов
/ 31 декабря 2011

Чтобы удалить все, кроме управляющих символов:

tr -d '\0-\176' < input > output

Для проверки:

printf 'foobar\n\377' | tr -d '\0-\176' | od -t c

Подробнее см. tr (1) man-страницу .

2 голосов
/ 31 декабря 2011

Для печати байтов в восьмеричном виде:

perl -ne'printf "%03o\n", ord for /[^\x09\x0A\x20-\x7E]/g' file  | sort -u

Для печати байтов в шестнадцатеричном виде:

perl -ne'printf "%02X\n", ord for /[^\x09\x0A\x20-\x7E]/g' file  | sort -u

Для печати оригинальных байтов:

perl -nE'say for /[^\x09\x0A\x20-\x7E]/g' file  | sort -u
2 голосов
/ 31 декабря 2011

Это должно поймать все, что превышает порядковое значение 126, без необходимости явно отсеивать выбросы

#!/bin/bash

while IFS= read -n1 c; do 
  if (( $(printf "%d" "'$c") > 126)); then
    echo "$c"
  fi
done < ./infile | sort -u

выход

¥
¿
õ
0 голосов
/ 31 декабря 2011
sed -e 's/[A-Za-z0-9,|]//g' -e 's/-//g' -e 's/./&^M/g' | sort -u

Удалите все, что вам не нужно, разместите все остальное в отдельной строке, а затем сортируйте -u весь комплект.

"& ^ M" - это "&", за которым следует Ctrl-V, а затем Ctrl-M в Bash.

Unix выигрывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...