선택한 행에서 공백을 제거하는 방법

선택한 행에서 공백을 제거하는 방법

Linux에서 파일의 선택한 줄에서 공백을 제거하는 데 작은 문제가 있습니다.

예를 들어:

f h t s q e g h c h t
f h t r f h v f d g n
q a z x s w e d c v f
f h b c h t h b v h f
p l k o i j u h y g t
t f r d c v b h n j u

이제 2, 4, 5행의 공백을 어떻게 제거해야 합니까? 또한 세 번째 줄을 찾는 방법은 무엇입니까?

답변1

awk를 사용하세요

2, 4, 5행에서 공백을 제거하려면 다음을 수행하십시오.

$ awk 'NR==2 || NR==4 || NR==5 {gsub(/ /,"");} 1' file 
f h t s q e g h c h t
fhtrfhvfdgn
q a z x s w e d c v f
fhbchthbvhf
plkoijuhygt
t f r d c v b h n j u

awk에서는 NR줄 번호입니다. 논리식은 NR==2 || NR==4 || NR==5관심 있는 행을 선택합니다. 이 명령은 gsub(/ /,"")해당 줄에서 공백을 제거합니다. 조건 1은 awk가 해당 행의 비밀스러운 약어를 인쇄한다는 것입니다.

sed 사용

2, 4, 5행에서 공백을 제거하려면 다음을 수행하십시오.

$ sed '3n; 2,5 s/ //g' file 
f h t s q e g h c h t
fhtrfhvfdgn
q a z x s w e d c v f
fhbchthbvhf
plkoijuhygt
t f r d c v b h n j u

여기서는 약간 다른 논리를 사용합니다. 즉, 3행을 제외한 모든 2~5행에서 공백을 제거합니다. 작동 방식은 다음과 같습니다. 이 표현식은 3nsed에게 라인 3에 도달하면 이를 인쇄하고 다음 라인으로 점프하라고 지시합니다. 그렇지 않으면 `2,5 s/ //g 명령은 sed에게 2~5행의 모든 ​​공백을 제거하라고 지시합니다.

공백뿐만 아니라 모든 공백을 제거합니다.

awk 'NR==2 || NR==4 || NR==5 {gsub(/[[:space:]]/,"");} 1' file

또는:

sed '3n; 2,5 s/[[:space:]]//g' file

답변2

다른 변형은awk

awk 'NR~/^[245]$/{$1=$1}1' OFS='' file

답변3

쉘을 사용하여 이 작업을 수행할 수 있습니다. 어떤 경우에는 그만한 가치가 있을 수도 있습니다. 하지만 자주는 아닐 것 같습니다.

sh -fc  <in >out '
    for IFS do read -r l
        printf %s $l;echo
    done; exec cat
' -- '' \  '' \  \ 

f h t s q e g h c h t
fhtrfhvfdgn
q a z x s w e d c v f
fhbchthbvhf
plkoijuhygt
t f r d c v b h n j u

답변4

누군가는 "tr"을 올바르게 표현하고 솔루션을 선언해야 하므로 다음과 같습니다.

 tr -d [:space:]

또는

 tr -d [:blank:]

텍스트 소스가 ich라는 파일이라고 가정합니다.

 cat ich | tr -d [:space:]

그러면 공백 없이 한 줄이 생성됩니다.

fhtsqeghchtfhtrfhvfdgnqazxswedcvffhbchthbvhfplkoijuhygttfrdcvbhnju

이 줄을 유지하려면 다음 변형을 사용하십시오.

 cat ./ich | tr -d [:blank:]

이 출력을 생성합니다 (줄 사이에 추가 줄 바꿈 제외)

브케츠코헤흐트

푸터포베르데겐

qazxswedcvf

UHF

풀코유겟

tfrdcvbhnju

친애하는 동료 여러분, 귀하의 답변은 매우 흥미롭습니다!

에프.

관련 정보