从命令行:
$cat file.txt
OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED
在file.txt上运行awk:
awk '{sub(/[ ]+/," ")}1' file.txt
预期结果:OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED
来自我的脚本: $ cat script.sh
active_db_users="OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED"
for i in $active_db_users
do
acct_status=$(echo $i | awk '{sub(/[ ]+/," ")}1')
echo $acct_status
done
运行脚本:
./script.sh > output
cat output
OLAPSYS:3FB8EF9DB538647C:LOCKED
OR
EXPIRED
意外结果有回车符。如何修改脚本,使结果为一行,没有回车符:
OLAPSYS:3FB8EF9DB538647C:已锁定或已过期
答案 0 :(得分:0)
正确引用你的shell变量:
active_db_users="OLAPSYS:3FB8EF9DB538647C:LOCKED OR EXPIRED"
for i in "$active_db_users"
do
acct_status="$(echo "$i" | awk '{sub(/[ ]+/," ")}1')"
echo "$acct_status"
done
然后再次运行脚本,如果您仍有问题,请告诉我们。
如果你不知道为什么你应该总是引用你的变量,请参见https://unix.stackexchange.com/a/171347/133219,除非你有一个特定的目的,让他们不加引号并完全理解所有的含义。
同时阅读https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice - 无论你想要做什么,上述脚本似乎都是错误的方法。