Как можно стереть первый символ всех строк в файле, если это ноль?
например
У меня есть файл
$ cat file
01111111 01222222 6666066
09999011 02222044 0743333
01000000 30000000 2222220
Попробуйте выполнить команду sed с выводом:
$ sed 's/^0*\(.*\)/\1/' file
1111111 01222222 6666066
9999011 02222044 0743333
1000000 30000000 2222220
но это сотрет только ноль в первом столбце.
Как стереть все нули в первом символе файла, например, вывести:
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
решение1
Вероятно, справедливо предположить, что строка в вашем тексте разделена пробелами. Если это так, вам нужно удалить ноль, если ему предшествует пробел:
sed 's/\([[:space:]]\)0/\1/g'
Конструкция \(...\)
сохраняет пробел, предшествующий нулю, а при \1
замене вызывает сохраненный текст.
Затем позаботьтесь также о начальных нулях:
sed -e 's/\([[:space:]]\)0/\1/g' -e 's/^0//'
Кстати, ваш пример нестеретьне начальные нули, но этозаменяетих с пробелом. Мое решение предполагает стирание.
Кроме того, ваше решение для замены начального нуля фактически заменяет целую последовательность начальных нулей. Однако ваш вопрос требуетпервыйноль, который нужно стереть. Вот что делает мое решение.
решение2
Для этого удобно использовать Perl:
perl -lape 's/\b(0+)/" " x length($1)/ge' file
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
Или эквивалент в awk
awk '{while (1) if (gsub(/\<0/, " ", $0) == 0) break; print}' file
Оба варианта превратят «0» или «00» (как отдельные слова) в простые пробелы.
Если у вас есть
$ cat file
01111111 01222222 6666066
09999011 02222044 0743333
01000000 30000000 2222220
00000007 00000009 0000000
Затем, чтобы сохранить нулевые значения в последней строке, можно:
$ perl -lape 's/\b(0+)(\d)/" " x length($1) . $2/ge' file
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
7 9 0