각 데이터 행을 여러 행으로 분할하고 예상 결과 집합에 표시된 대로 c1.txt
새 파일에 복사하려고 합니다 . 그러나 c2.txt
결국 두 파일 사이에는 차이가 없으며 두 파일 모두 여전히 동일한 줄 수를 갖습니다.c1.txt
c2.txt
two
c1.txt
# file: /home/mytest/data # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:smr:rwx default:group:agm:r-x default:mask::rwx default:other::---
# file: /home/mytest/datasr123 # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::---
암호
awk -v dt="file :" '$0 ~ dt {gsub(dt, "\n"dt)}1' c1.txt > c2.txt
예상되는 결과
# file: /home/mytest/data
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:smr:rwx
default:group:agm:r-x
default:mask::rwx
default:other::---
# file: /home/mytest/datasr123
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
답변1
를 사용하여 sed
다음을 수행할 수 있습니다.
sed -E ':j s/ ([^ ]*)$/\n\1/; t j;' infile \
| sed -E ':j /(:|#)$/ { N; s/\n/ /;t j; }'
첫 번째 sed
명령은 줄 끝에서 시작하여 보이는 모든 공백의 줄을 바꿉니다.
두 번째 명령은 sed
또는로 끝나는 줄을 다시 연결합니다.#
:
답변2
awk
대사
awk '{ for (i=1; i<=NF; i++) if ($i ~ "[#:]$" ) printf $i" "; else print $i; }' c1.txt
sed
더 취약하지만 변형 도 있습니다
sed -E "s/([^:#]) ([#a-z])/\1\n\2/g" c1.txt
답변3
FPAT에 GNU awk를 사용하고 게시한 예제 입력과 같이 실제 입력의 파일 이름 등에 공백이 없다고 가정합니다.
$ awk -v FPAT='(#\\s+\\S+:\\s+)?\\S+' '{for (i=1; i<=NF; i++) print $i; print ""}' file
# file: /home/mytest/data
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:smr:rwx
default:group:agm:r-x
default:mask::rwx
default:other::---
# file: /home/mytest/datasr123
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
답변4
나에게 잘 맞는다
for ((i=1;i<=2;i++)); do sed -n ''$i'p' filename |sed "s/#/\n#/g" |sed '/^$/d'| sed "3s/ /\n/3g";echo " "| sed "s/.*/&\n/g"; done
산출
# file: /home/mytest/data
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:smr:rwx
default:group:agm:r-x
default:mask::rwx
default:other::---
# file: /home/mytest/datasr123
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---