내 데이터 파일에이 문자열을 (dat.txt) =>를 가지고는 나오지
00000
10101
나는 1 행, 두 번째와 네 번째 열을 교체하려면, 나는 노력이를 사용하여 고정 폭 파일의 특정 컬럼을 교체 :
$>sed -i "/^1/s/0/1/2" dat.txt
$>sed -i "/^1/s/0/1/4" dat.txt
그러나 dat.txt를 다시로드해도 아무 것도 변경되지 않습니다. 내 명령이 틀렸어?
내 데이터 파일에이 문자열을 (dat.txt) =>를 가지고는 나오지
00000
10101
나는 1 행, 두 번째와 네 번째 열을 교체하려면, 나는 노력이를 사용하여 고정 폭 파일의 특정 컬럼을 교체 :
$>sed -i "/^1/s/0/1/2" dat.txt
$>sed -i "/^1/s/0/1/4" dat.txt
그러나 dat.txt를 다시로드해도 아무 것도 변경되지 않습니다. 내 명령이 틀렸어?
첫 번째 행의 행이 이고 행이 인 행을 제외하고는 두 번째 행 (1
으로 시작하는 행)을 변경합니다.
2
및 4
은 두 번째/네 번째 열을 변경하지 않으므로 두 번째/네 번째 발생 패턴을 검색 패턴으로 변경합니다.
는 다음과 같은 성적표를 참조하십시오 :
$ cat dat.txt
00000
10101
$ sed -i "/^1/s/0/1/2" dat.txt ; cat dat.txt
00000
10111
$ sed -i "/^1/s/0/1/4" dat.txt ; cat dat.txt
00000
10111
첫 번째 sed
이 1
에 0
의 두 번째 발생을 변경할 것을 볼 수 있으며, 그 네 번째 열였다. 두 번째 sed
은 네 번째 발생까지 수행하도록 요청한 이후 아무 것도 변경하지 않았으며 거기에 네 개의 0
문자가 없습니다.
당신이 열 특정 변경하려면, 다음과 같은 성적 증명서에서와 같이 패턴을 캡처 사용할 수 있습니다 대체 텍스트에서 \1
것을 참조하는 데 사용할 수 있도록 패턴을 캡처
$ cat dat.txt
00000
10101
$ sed -i "/^1/s/^\(.\)0/\11/" dat.txt ; cat dat.txt
00000
11101
$ sed -i "/^1/s/^\(...\)0/\11/" dat.txt ; cat dat.txt
00000
11111
괄호를 그 잡힌 텍스트에. 변경하려는 문자 앞에 소수의 문자가 포함되어 있기 때문에 ...
을 패턴으로 사용할 수 있습니다. 이 그것을해야
sed -i "/^1/s/^\(.\{84\}\)0/\11/" dat.txt ; cat dat.txt
대체 후 숫자는 특정 문자가 아니라 변경할 인스턴스 번호입니다. 네 번째 인스턴스가 없으므로 두 번째 인스턴스는 효과가 없지만 두 번째 인스턴스는 두 번째 인스턴스를 10111
으로 변경해야합니다.
: 당신이 (예를 들어) 85 일 열을 변경하고자한다면, 당신은 아마 같은 뭔가 더 나을 것
sed -i -e '1 s/0/1/2' -e '1 s/0/1/3' dat.txt
-e
수단은 추가 명령을 사용하므로 하나씩 차례대로 실행합니다. 당신은이를 사용할 수 있습니다 1
로 시작하는 모든 행 (^
수단 '라인의 일치 시작') 변경 : 귀하의 질문에, /^1/
부분 나오지 수단 명령 s
전에
sed -i '1 s/0/1/2; 1 s/0/1/3' dat.txt
참고.여기 봐 :
을 특히 섹션을 (줄 번호로 제한)에 대한 링크 포인트와 다음 (패턴) 섹션을 참조하십시오.
이 시도 :
sed -i '1{s/./1/2;s/./1/4}' dat.txt
결과 :
01010
10101