행을 두 개의 열로 나누고 싶습니다
./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****
위 줄의 콜론(:)이 구분 기호 역할을 하고 아래와 같이 출력되기를 원합니다.
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
누구든지 나를 도와줄 수 있나요?
답변1
당신은 그것을 사용할 수 있습니다awk
awk -F"[:=]" '{print $1"\t"$2}' $file
2개의 구분 기호를 설정하여 FS
그 이후의 모든 항목을 =
열로 만들고 제외할 수 있습니다.
당신은 또한 사용할 수 있습니다sed
sed -E 's/(^.*):(.*)=.*/\1\t\2/'
산출*
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
답변2
당신은 시도 할 수 있습니다:
echo "./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****" | tr ':' '\t'
답변3
또한 awk
다음 가능성을 사용하십시오.
echo './ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****' | awk 'sub(/=[^=]*$/,""){sub(/:/,"\t")} 1'
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
sub()
교체가 성공하면 1을 반환하고, 그렇지 않으면 0을 반환합니다.- 조건: 첫 번째
sub()
기능. 대안이 있나요? 그렇다면 두 번째sub()
기능을 수행하십시오. - 첫 번째
sub()
:sub(/=[^=]*$/,"")
삭제부터=
끝까지. - 두 번째
sub()
: 탭sub(/:/,"\t")
교체:
\t
답변4
사용행복하다(이전 Perl_6)
콜론을 하나만 분할하려는 경우 :
:
raku -ne '.split(":").join("\t").put;'
그러나 두 번째 요소(색인=1)를 정리하려면 다음을 수행하십시오.
raku -ne '.=split(":"); put( .[0] ~ "\t" ~ .[1].subst(/ \=.* /));'
입력 예:
./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****
출력 예(1):
./ABC/dce/app/config/fgh/pqr/app.properties app.pass=*****
출력 예(2):
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
간단히 말해서, 이 split
절차는 :
결장을 파괴적으로 분할하여 제거하는 것입니다. 첫 번째 예에서는 결과 문자열이 탭 문자를 사용하여 다시 결합됩니다 \t
. 두 번째 예에서는 결과 문자열이 실제로 $_
할당 연산자를 사용하여 주제 변수에 다시 저장 되므로 .=
두 번째 작업( .=
예, 단축형 $_.=
)을 수행할 수 있습니다. 두 번째 작업은 정규식을 아무것도 subst
바꾸지 않습니다(즉, 삭제합니다).\=.*
Raku의 문자열 연결은 ~
물결표 문자를 통해 수행됩니다. 위의 코드는 요청된 작업을 수행합니다. 그러나 열 사이의 간격을 변경하려면 유사한 문자열 연결을 사용해 볼 수 있습니다 ~ "\t" xx 4 ~
(예: \t
탭 문자가 4번 반복됨).