最近在做很多的字符串处理的工作,主要用的还是excel,但是很费神,总是Ctrl+C和Ctrl+V。就想用shell脚本对对应的字符串进行批量处理。
1)首先是读取文件中的每一行字符串
使用cat和while来读取file文件中的每一行,并输出到target文件中。
cat $file | while read LINE
do
echo $LINE >> $target
done
2)判断字符串是否含有特定的字符
"=~"正则式匹配符号,"_"就是要匹配的对象,也可使替换为其他的符号。
if [[ $LINE =~ "_" ]]; then
echo "It contains the '_'"
else
echo "It does not contains the '_'"
fi
2)替换"_"字符
使用sed命令删除"_"。
sed -i 's/_//g' $target
3)首字母大写
找到每行的首字母^\w和"_"之后的首字母\_\w,然后替换为大写字母\U&。
\w 相当于 [a-zA-Z0-9] 。\U将后面的字符转换成大写,&指前面匹配的内容,下面sed的作用是将行首字母或者是_后面每个单词的首字母转换成大写。
sed -i 's/^\w\|\_\w/\U&/g' $target
4)判断只有数字的行
if [ -n "$(echo $LINE | sed -n "/^[0-9]\+$/p")" ]; then
ehco "This line is number"
fi
5)字符串转换为小写
注意tr之后的'A-Z'和'a-z'有空格。
echo $LINE | tr 'A-Z' 'a-z'
下面是我编写的脚本,与大家共享,欢迎大家拍砖。
cat $file | while read LINE
do
if [ -n "$(echo $LINE | sed -n "/^[0-9]\+$/p")" ]; then
echo "~~~~~~~~~~~~~~~~~~~~$LINE~~~~~~~~~~~~~~~~~~~" >> $target
else
if [[ $LINE =~ "_" ]]; then
lowercase=$(echo $LINE | tr 'A-Z' 'a-z')
else
lowercase=$LINE
fi
echo ${lowercase}HelpId >> $target
sed -i 's/^\w\|\_\w/\U&/g' $target
sed -i 's/\s\w/\U&/g' $target
sed -i 's/_//g' $target
fi
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)