COMPANY_NAME=`cat file.txt | grep "company_name" | cut -d '=' -f 2`
Run Code Online (Sandbox Code Playgroud)
输出这样的东西
"Abc Inc";
Run Code Online (Sandbox Code Playgroud)
我想要做的是我想删除尾随的";" 同样.我怎样才能做到这一点?我是bash的初学者.任何想法或建议都会有所帮助.
zta*_*013 60
这将删除您的COMPANY_NAME var中包含的最后一个字符,无论它是否是分号:
echo "$COMPANY_NAME" | rev | cut -c 2- | rev
Run Code Online (Sandbox Code Playgroud)
Lau*_*ves 49
我用了sed 's/;$//'.例如:
COMPANY_NAME=`cat file.txt | grep "company_name" | cut -d '=' -f 2 | sed 's/;$//'`
Run Code Online (Sandbox Code Playgroud)
gro*_*ter 42
foo="hello world"
echo ${foo%?}
hello worl
Run Code Online (Sandbox Code Playgroud)
Aar*_*ang 23
我会用head --bytes -1,或head -c-1简称.
COMPANY_NAME=`cat file.txt | grep "company_name" | cut -d '=' -f 2 | head --bytes -1`
Run Code Online (Sandbox Code Playgroud)
head仅输出流或文件的开头.通常它会对行进行计数,但可以对字符/字节进行计数.head --bytes 10将输出前十个字符,但head --bytes -10将输出除最后十个之外的所有字符.
注意:如果最终字符是多字节,则可能会出现问题,但不是分号
我推荐这个解决方案sed或cut因为
head设计要做的事情,因此命令行选项更少,命令更容易阅读mig*_*ile 11
我相信用bash从字符串中删除单个字符的最简洁方法是:
echo ${COMPANY_NAME:: -1}
Run Code Online (Sandbox Code Playgroud)
但我无法将grep文件嵌入花括号中,因此您的特定任务变为双线:
COMPANY_NAME=$(grep "company_name" file.txt); COMPANY_NAME=${COMPANY_NAME:: -1}
Run Code Online (Sandbox Code Playgroud)
这将删除任何字符,分号或不分号,但也可以专门删除分号.删除所有分号,无论它们落在何处:
echo ${COMPANY_NAME/;/}
Run Code Online (Sandbox Code Playgroud)
要在结尾处仅删除分号:
echo ${COMPANY_NAME%;}
Run Code Online (Sandbox Code Playgroud)
或者,从末尾删除多个分号:
echo ${COMPANY_NAME%%;}
Run Code Online (Sandbox Code Playgroud)
有关这方法的详细信息和更多信息,Linux文档项目涵盖了很多基础http://tldp.org/LDP/abs/html/string-manipulation.html
sed如果您不知道最后一个字符是什么,请使用:
$ grep company_name file.txt | cut -d '=' -f2 | sed 's/.$//'
"Abc Inc"
Run Code Online (Sandbox Code Playgroud)
不要滥用cats.您知道grep吗也可以读取文件吗?
规范的方法是这样的:
grep "company_name" file.txt | cut -d '=' -f 2 | sed -e 's/;$//'
Run Code Online (Sandbox Code Playgroud)
更聪明的方法将使用单个perl或awk语句,它可以一次过滤和不同的转换.例如这样的事情:
COMPANY_NAME=$( perl -ne '/company_name=(.*);/ && print $1' file.txt )
Run Code Online (Sandbox Code Playgroud)