이것이 0인 경우 파일의 모든 문자열의 첫 번째 문자를 어떻게 지울 수 있습니까?
예를 들어
파일이 있어요
$ 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
하지만 이렇게 하면 첫 번째 열의 0만 지워집니다.
파일의 첫 번째 문자에서 모든 0을 지우는 방법 예: 출력:
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
답변1
텍스트의 문자열이 공백으로 구분된다고 가정하는 것이 아마도 공정할 것입니다. 그렇다면 앞에 공백이 올 때마다 0을 제거해야 합니다.
sed 's/\([[:space:]]\)0/\1/g'
구문 \(...\)
은 0 앞에 오는 공백을 저장하고 \1
대체 문자는 저장된 텍스트를 호출합니다.
그런 다음 선행 0도 처리하십시오.
sed -e 's/\([[:space:]]\)0/\1/g' -e 's/^0//'
그건 그렇고, 당신의 예는 그렇지 않습니다삭제초기 값은 0이 아니지만대체하다공백으로. 내 솔루션은 삭제를 가정합니다.
또한 선행 0을 바꾸는 솔루션은 실제로 선행 0의 전체 시퀀스를 대체합니다. 그러나 귀하의 질문은첫 번째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
그런 다음 마지막 줄에서 0 값을 유지하려면 다음을 수행할 수 있습니다.
$ perl -lape 's/\b(0+)(\d)/" " x length($1) . $2/ge' file
1111111 1222222 6666066
9999011 2222044 743333
1000000 30000000 2222220
7 9 0