我需要大写txt文件,但是当我尝试用sed在标点符号后添加一个空格时,我发现了一些问题。例如:"Hello,World“->到"Hello,World”
我尝试了以下几种方法:
#!/bin/bash
if [ $# != 1 ]; then
echo "No parameter"
exit
fi
cp $1 $1.bak
ARCH1=/tmp/`basename $1`.$$
sed 's/[A-Z]*/\L&/g' $1 > $ARCH1
sed -i 's/^./\u&/' $ARCH1
sed 's/ */\ /g' $ARCH1 #Here I replace >= 2 spaces for 1
sed 's/, */, /g' $ARCH1
#These 2 lines don't work well
sed 's/. */. /g' $ARCH1
sed 's/; */; /g' $ARCH1
mv $ARCH1 $1
脚本没有崩溃,但是输出结果并不是我所期望的。
发布于 2018-06-03 03:02:27
使用GNU sed:
$ echo "foo;BAR,BaZ.qux" | sed -r 's/[[:punct:]]+/& /g; s/[[:alnum:]]+/\L\u&/g'
Foo; Bar, Baz. Qux
\L
小写整个单词,然后\u
大写第一个字符。
有关正则表达式文档,请参阅regex(7)
手册页。
https://stackoverflow.com/questions/50658698
复制相似问题