답변:
둘 이상의 공백 시퀀스를 탭으로 변환하지만 개별 공백은 그대로 둡니다 .
sed 's/ \+ /\t/g' inputfile > outputfile
여러 파일에 대해이를 수행하려면 다음을 수행하십시오.
for inputfile in *
do
sed 's/ \+ /\t/g' "$inputfile" > tmpfile && mv tmpfile "$inputfile"
done
또는
for inputfile in *
do
sed -i.bak 's/ \+ /\t/g' "$inputfile"
done
또는
find . -type f -exec sed -i.bak 's/ \+ /\t/g' {} \;
sed: -e expression #1, char 1: unknown command: `.'
find
바닥에 하나.
sed
는 백업 확장 앞에 공백이없는 것을 좋아합니다. 내 답변을 편집했습니다. 보고서 주셔서 감사합니다.
sed
여러 공백을 탭으로 바꾸는 데 사용할 수 있습니다 .
하나 이상의 공백을 하나의 탭으로 바꾸는 예 :
cat spaced-file | sed 's/ \+/\t/g' > tabbed-file
가장 쉬운 대답 bash
은 다음과 같습니다.
while read -r col1 col2 col3 ...; do
echo -e "$col1\t$col2\t$col3..."
done <file
가변 개수의 열이있는 경우이 작업을 수행 할 수 있지만 다음에서만 작동 bash
하지는 않습니다 sh
.
while read -r -a cols; do
(
IFS=$'\t'
echo "${cols[*]}"
)
done <file
예 :
while read -r -a cols; do
(
IFS=$'\t'
echo "${cols[*]}"
)
done <<EOF
a b c
d e f
g h i
EOF
생산 :
a b c
d e f
g h i
(각 탭 사이에 탭이 있지만 여기에 붙여 넣을 때보기가 어렵습니다)
또한 사용하여 그것을 할 수 sed
또는 tr
하지만, 통지는 시작에 공백의 처리는 다른 결과를 얻을 수있다.
sed :
$ sed 's/ */\t/g' << EOF
a b c
d e f
g h i
EOF
a b c
d e f
g h i
tr :
$ tr -s ' ' '\t' <<EOF
a b c
d e f
g h i
EOF
a b c
d e f
g h i
perl -p -i -e 's/\s+/\t/g' *.txt
이것은 매우 간단한 해결책입니다.
sed -E 's/\s+/\t/g' your_file > new_file
sed는 기본적으로 이런 방식으로 작동합니다 (sed 's / old_pattern / new_pattern / g'). 이 경우 이전 패턴은 "\ s +"이며 이는 "s"공간을 한 번 이상 "+"찾아서 백 슬래시 "\"를 찾아 정규 표현식으로 해석하는 것을 의미합니다.
새 패턴은 "\ t"탭으로 정규식 형식으로 작성되며 "g"는 모든 행에 "전역 적으로"적용됩니다.