
00
파이프로 구분된 파일에서 공백을 바꿔야 하지만 다섯 번째 파이프 뒤에 나타나는 경우에만 가능 합니다 00
. 저는 리눅스를 사용하고 있습니다. 나는 시도했다:{sed 's/00/\ /6' input.txt > output.txt}
견본:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|00
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
나는 다음과 같은 결과를 원합니다 :
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHJ|Y
ABC|DE|GGH|N|FFHK|N
ABC|DE|GGH|OO|FFHU|
답변1
제공한 예에서 필요한 것은 다음과 같습니다.
$ sed 's/|00$/|/' file
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
또는 6개 이상의 필드 입력에 대해 더욱 강력하고 유연합니다.
$ awk 'BEGIN{FS=OFS="|"} $6=="00"{$6=""} 1' file
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
답변2
사용행복하다(이전 Perl_6)
raku -pe 's:pos($/.from)/ \| 00 /| / if m:5th/ \| /;'
또는
raku -pe 's:pos($/.from)[ \| 00 ] = "| " if m:5th[ \| ];'
입력 예:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|00
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
예제 출력:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
Raku는 :nth
찾으려는 일치 항목(예: :1st
, :2nd
, )을 지정할 수 있는 "부사" 정규식 매개변수를 구현합니다.:nth(5)
위의 Raku 코드는 위치 m:5th
( |
파이프 문자 감지)의 일치 항목과 대체 항목을 결합하여 s:pos($/.from)
일치 변수 위치에서 일치 항목 검색을 시작합니다.$/.from
따라서 5번째와 일치하면 |
해당 위치가 에 저장됩니다 $/.from
. \| 00
해당 위치에서 $/.from
정규 표현식을 찾으면 공백 으로 바꾸세요. 그렇지 않으면 두 번째 데이터 라인의 세 번째 문자 다음에 표시된
00
것처럼 문자가 변경되지 않고 그대로 유지됩니다 .|
[참고: "초기" 열을 모두 변경하지 않고 그대로 두고 "나중" 열만 바꾸려면 부사 :continue
대신 :pos
부사를 사용하세요.]
https://docs.raku.org/언어/regexes#index-entry-matching_adverb_:pos-matching_adverb_:p-Pos
https://raku.org
답변3
sed "s/\(\(.*|\)\{5\}[^0]*\)00/\1 /" <input.txt
의미:
\(\(.*|\)\{5\}
: 슬래시 5개
[^0]*
다섯 번째 슬래시 이후에는 0이 아닙니다.
all to \1은 \1과 두 개의 0을 인쇄합니다.
입력 예:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|rZZ00r
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
예제 출력:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|rZZ r
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|