파일을 한 줄씩 읽고 각 줄을 편집한 다음 해당 줄을 별도의 파일에 저장합니다.
while read -r line
do
newline=$(echo $line | sed -r 's/\</\n/g' | sort | tr '\n' ' ')
echo "$newline" >> newfile
done < "$filename"
$filename
하지만 원래 줄을 새 줄로 바꾸고 싶습니다 . 나는 사용할 수 있다는 것을 읽었 cat filename... | xargs -n1 command
지만 sed -i ...
지금까지 내 흔적은 실패했습니다.
다음은 입력 예입니다.
1.e4 e5 2.Nf3 Nc6 3.
1.d4 d5 2.e4 dxe4 3.
1.e4 e5 2.Nf3 Nf6 3.
예상되는 결과는 다음과 같습니다.
1. 2. 3. e4 e5 Nc6 Nf3
1. 2. 3. d4 d5 dxe4 e4
1. 2. 3. e4 e5 Nf3 Nf6
답변1
sponge
에서 언급한 대로 를 사용할 수 있습니다 .표준 입력 또는 파일을 버퍼링할 수 있는 프로그램. 입력이 리디렉션되는 것과 같은 방식으로 전체 루프를 파이프로 연결할 수 있습니다.
while read -r line ; do
echo "$line" | sed -r 's/\</\n/g' | sort | tr '\n' ' ' ;
echo
done < filename | sponge filename
Perl을 사용하면 다음과 같이 동일한 작업을 수행할 수 있습니다(공백의 양이 다릅니다).
perl -Mlocale -i -lne 'print join " ", sort split/(?<=\.)| /' filename
답변2
앗접근하다:
awk 'BEGIN{IGNORECASE=1;}{ gsub(/\./,". ", $0); split($0, w, " ");
asort(w);l=""; for(i in w) {l=l" "w[i]} print l}' file
출력:
1. 2. 3. e4 e5 Nc6 Nf3
1. 2. 3. d4 d5 dxe4 e4
1. 2. 3. e4 e5 Nf3 Nf6
무시명령줄이나시작하다규칙
split($0, w, " ");
- 줄을 별도의 단어로 나눕니다.
asort(w);
- 배열 값(단어) 정렬
for(i in w) {l=l" "w[i]}
- 정렬된 단어를 한 줄로 연결