파일의 모든 문자열의 첫 번째 문자를 지우는 방법

파일의 모든 문자열의 첫 번째 문자를 지우는 방법

이것이 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

관련 정보