Как удалить все символы кроме последнего - PullRequest
0 голосов
/ 26 февраля 2011

Я хочу проанализировать файл и удалить все первые 0 числа, используя sed.(конечно, если у меня есть что-то вроде 0000, то результат равен 0) Как это сделать?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2011

Это, вероятно, слишком сложно, но оно охватывает все угловые случаи, которые я тестировал:

sed 's/^\([^0-9]*\)0/\1\n0/;s/$/}/;s/\([^0-9\n]\)0/\1\n/g;s/\n0\+/\n/g;s/\n\([^0-9]\)/0\1/g;s/\n//g;s/}$//' inputfile

Объяснение:

Используется метод «разделяй и властвуй» для вставки новых строк для разделениясегменты линии, чтобы ими можно было управлять индивидуально.

  • s/^\([^0-9]*\)0/\1\n0/ - вставить новую строку перед первым нулем
  • s/$/}/ - добавить символ конца буфера
  • s/\([^0-9\n]\)0/\1\n/g - вставлять новые строки перед каждым ведущим нулем (и удалять первый)
  • s/\n0\+/\n/g - удалять оставшиеся начальные нули
  • s/\n\([^0-9]\)/0\1/g - заменять пустые нули
  • s/\n//g - удалить переводы строк
  • s/}$// - удалить буфер конца строки

Этот файл:

0 foo 1 bar 01 10 001 baz 010 100 qux 000 00 0001 0100 0010
100 | 00100
010 | 010
001 | 001
100 | 100
0 | 0
00 | 0
000 | 0
00 | 00
 00 | 00
00 | 00 z

Становится:

0 foo 1 bar 1 10 1 baz 10 100 qux 0 0 1 100 10
100 | 100
10 | 10
1 | 1
100 | 100
0 | 0
0 | 0
0 | 0
0 | 0
 0 | 0
0 | 0 z
0 голосов
/ 27 февраля 2011

Если у вас начальные нули и они сопровождаются строкой чисел, все, что вам нужно сделать, это преобразовать их в целое число.Примерно так

$ echo "000123 test " | awk '{$1=$1+0}1'
123 test

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

Аналогично (Ruby1.9 +)

$ echo "000123 test " | ruby -lane '$F[0]=$F[0].to_i; print $F.join(" ")'
123 test

Для случаев всех 0000

$ echo "0000 test " | ruby -lane '$F[0]=$F[0].to_i; print $F.join(" ")'
0 test
$ echo "000 test " | awk '{$1=$1+0}1'
0 test
0 голосов
/ 26 февраля 2011

Я думаю, вы можете искать это.
Здесь лежит ваш ответ. Вы должны изменить конечно.

...