我有一个脚本,可以从以下格式的文件中获取用户名和手机
**Current Format**
username mobile
zzz 03333012345
123 03212334343
245 3712323689
现在我希望如果手机号码从“0”开始,则只应删除“0”,因此所有手机号码应显示为
**Required format:**
username mobile
zzz 3333012345
123 3212334343
245 371232368
(如果手机启动时没有零,则保持原样)
答案1
您可以使用以下 awk 来确保仅删除第二列中的前导 0
awk '{gsub("^0","",$2); print $1,$2}' yourfile.txt
答案2
尝试一下这个代码片段:
sed 's/\ [0]//g' test.1
注意,[ 之前有一个空格
例如
root@SHW:/tmp # cat test.1
**Current Format**
username mobile
zzz 03333012345
123 03212334343
245 3712323689
root@SHW:/tmp # sed 's/\ [0]//g' test.1
**Current Format**
username mobile
zzz 3333012345
123 3212334343
245 3712323689
它适用于我的 ubuntu-14.04
答案3
使用 Perl:
< inputfile perl -pe 's/ 0([0-9]+)$/ $1/' > outputfile
-p
:while (<>) {[...]}
在脚本周围放置一个循环并打印处理后的行-e
:从参数中读取脚本
Perl 命令分解:
s
:断言执行替换/
: 开始模式0([0-9]+)$
:匹配并分组行末尾的一个或多个数字,前面是 0 数字,后面是一个字符
/
:停止模式/开始替换字符串$1
: 替换为空格,后跟捕获的组/
:停止替换字符串/启动修饰符
答案4
并且bash
您可以使用:
while read username mobile
do
echo "${username} ${mobile/0/}"
done < inputfile