2018-04-17 url末尾多了个空格——alta系统回调给渠道丢失的转化,注意空格

cd /export/webapps/php.com/logs/actionlog/

grep -i -r "admobgeek" * > /export/admob_nid30_postback.txt

wc -l /export/admob_nid30_postback.txt

cat /export/admob_nid30_postback.txt |tr -s "[" "\n"|grep "admobgeek" > /export/admob_nid30_postback.txt_tr

cat admob_nid30_postback.txt_tr |tr -s "]" "\n"|grep "admobgeek" > admob_nid30_postback.txt_tr2

sort admob_nid30_postback.txt_tr2|uniq > admob_nid30_postback.txt_tr2_uniq

wc -l admob_nid30_postback.txt_tr2_uniq

function syncn(){ while read urlstr; do urlstr2=$(echo "$urlstr"); echo "$urlstr2"; \curl -k -L "$urlstr2"; done < admob_nid30_postback.txt_tr2_uniq; }

syncn

当时出错是因为psotbackurl配置时在宏的最后多了一个空格,导致url最后一个是空格,上面使用了 echo $str 去掉字符串的首尾空格并赋值给新的变量,再使用新变量当做url回调到渠道。

在 bash 下如何去除一个字符串首尾的空格(也就是 trim)呢?其实有一个简单的办法:

$ echo $STR

注意 $STR 不要带引号。(即使带上引号再次赋值到变量,空格也会移除的)
因为 $STR 展开后,会作为 echo 的参数。那么 echo 在处理参数的时候,自然会忽略首尾的空格。不过此种方法有个小问题,那就是 echo 输出的结果,会将字符串中间的连续空格变成一个空格。例如 $STR 为 " any string " 的话,那么输出将是 "any string"。

既然这种方法有这么个小问题,我就想是否可以用其他办法。最后想到的还是用 grep 来做。如下:

$ echo "$STR" | grep -o "[^ ]++[]+*"

用 "[^ ]+( +[^ ]+)*" 去匹配除首尾空格外的部分,然后 -o 仅输出匹配的部分,这样就达到去除首尾空格的效果了。

你可能感兴趣的:(2018-04-17 url末尾多了个空格——alta系统回调给渠道丢失的转化,注意空格)