
파일을 한 줄씩 읽고 각 줄을 편집한 후 해당 줄을 별도의 파일에 저장합니다.
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]}
- 정렬된 단어를 한 줄로 연결