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행에서 공백을 제거합니다. 작동 방식은 다음과 같습니다. 이 표현식은 3n
sed에게 라인 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
친애하는 동료 여러분, 귀하의 답변은 매우 흥미롭습니다!
에프.