解释sed 正则表达式 echo $1 > 1.tmp sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' 1.tmp;

作者&投稿:裔菡 (若有异议请与网页底部的电邮联系)
echo $1|sed s/\\.\/\_/g > /tmp/$1tmp.txt 怎么解释?尤其是后面的sed语句。~

你确定这个sed语句正确
sed s/\\.\/\_/g
sed中s替换语句需要三个正常的/来分隔查找和替换字符串,这个sed语句中 第二个/前面有个\
"\/"表示对/替换为正常字符而不是分隔符,因此这个sed还差一个分隔符,不能正确执行

-e选项,这里没什么作用,可以不写(可以查看sed帮助-e的介绍)
引号里面是sed的替换命令,常见的是 s/正则表达搜索/替换为/
将“替换为”字串替换“正则表达搜索”到的字符串。这里分隔符改为了竖线 |
正则搜索项:
.* -> ../../\(.*\)$
.*——任意字符
-> ——原样匹配,->并且前后有一个空格
../——两个任意字符,加上一个/字符
../——同上
\(.*\)——匹配任意字符,并且放在了捕获括号中
$——字符串结束位置
替换为:\1——引用前面正则表达式中第一个捕获括号里面的内容
整个意思是找到能匹配正则的内容,并用后面的一部分替换整个匹配,示例:

上面的示例得到了整个字符串最后面的一部分内容。

ta 的意思是,如果 s 匹配成功,则跳到 :a 的地方。(还有一个指令是 ba,它是无条件跳到 :a)

s 指令的意思就是找数字,并把最后3个数字单分出来,替换成 \1,\2 的用意用意相当于在最后三个数字之前加上 `,'。
如果这个替换执行成功,那么 ta 跳回来,就会重新执行 s 指令。最终的效果就是把 $1 里的数字加上千位分隔符。在数次划分后,这个数字最终不满三位了,s 指令会执行失败,这时 ta 不产生作用,便跳出循环。

$1 > 1.tmp 获取当前脚本第一个参数,并输出至1.tmp

.*[0-9] 与后面 \1等同

[0-9]\{3\} 与后面\2等同

:a ..... ta 是一对符号,表示如果ta之前执行成功,则跳转到:a标识符

整条命令就是一个文本重新排位

命令分段:

echo $1 > 1.tmp sed -e :a -e 's/ \(.*[0-9]\) \([0-9]\{3\}\) /\1,\2/ ;ta' 1.tmp;


宾川县13568797768: 解释sed 正则表达式 echo $1 > 1.tmp sed - e :a - e 's/\(.*[0 - 9]\)\([0 - 9]\{3\}\)/\1,\2/;ta' 1.tmp; -
艾废华仁: $1 > 1.tmp 获取当前脚本第一个参数,并输出至1.tmp.*[0-9] 与后面 \1等同 [0-9]\{3\} 与后面\2等同:a ..... ta 是一对符号,表示如果ta之前执行成功,则跳转到:a标识符 整条命令就是一个文本重新排位 命令分段:echo $1 > 1.tmp sed -e :a -e 's/ \(.*[0-9]\) \([0-9]\{3\}\) /\1,\2/ ;ta' 1.tmp;

宾川县13568797768: 关于linux 里sed的用法与正则表达式? -
艾废华仁: 题主你好,这道题的关键点在于: " [a]* 表示匹配0个或多个a "" 多个a "好理解,但" 0个a "可能就是你不理解的地方,说白了" 0个a "匹配的是位置而并不是某个字符, " 0个a "故名思议嘛: " 没有a的地方 "------------------- 下来咱看...

宾川县13568797768: linux sed命令中正则表达式解析 -
艾废华仁: 例如字符串是12345old67890old 那么上面语句分解如下:s/ 是启用替换 替换内容如下:\(.*\) 对应12345 并标记为\1 old 对应old \(.*old\) 对应67890old 并标记为\2 替换内容如上:那么替换后的格式如下:/\1new\2 对应 12345new67890old

宾川县13568797768: 关于shell的sed正则表达式用法问题 -
艾废华仁: 正则匹配中,点号.表示任意一个字符,*表示重复前面一个字符(这里就是点号.)0次或多次.\(.*\)a表示要以一个a字符结尾,而默认情况下*具有贪婪特性,会匹配符合要求的最大数目的字符.因此 .* 就匹配到了最后一个a前面的所有字符.\( \) 这种结构在sed的替换命令里是组的概念,在后面替换时可以用\n来引用.第一个组用\1,第二个组用\2,依此类推.这个命令的作用就是:将字符串中最后一个a字符替换为b,其余不变.

宾川县13568797768: echo $1|sed s/\\.\/\ - /g > /tmp/$1tmp.txt 怎么解释?尤其是后面的sed语句. -
艾废华仁: 你确定这个sed语句正确 sed s/\\.\/\_/g sed中s替换语句需要三个正常的/来分隔查找和替换字符串,这个sed语句中 第二个/前面有个\"\/"表示对/替换为正常字符而不是分隔符,因此这个sed还差一个分隔符,不能正确执行

宾川县13568797768: Linux shell正则表达式的问题关于sed命令中使用正则表达式,我有以下一些疑问.这里有两个例子.$ echo this is an example | sed 's/\w\+/[&]/g'[this] [is] [an] [... -
艾废华仁:[答案] \w+的意思是数字和字母的字串 而你后一个用的是[a-z]+小写字母的字串 其实上面那个\w ,你也可以写成[a-zA-Z0-9_]+ 效果是一样的

宾川县13568797768: linux shell 为什么必须用echo来完成sed操作? -
艾废华仁: echo只是用来显示你操作的结果的,echo和sed操作之间没有联系.

宾川县13568797768: shell的sed用法 -
艾废华仁: djy@game-rd10:~> echo "uid=100(guest) gid=100(others) groups=10(users),11(floppy)"|sed 's/^[^(]*(\([^)]*\).*/\1/' 输出 guest [^(]表示不是(^[^(]*表示不是(开头的一串,*跟在后面表示一个或者连续几个不已(开头的字符 (表示guest左边的( \([^)]*\)表示不以)结束的一串字符,匹配后面\1输出 .*表示guest后面的所有字符

宾川县13568797768: linux shell sed 正则表达式分析 -
艾废华仁: -e 允许多台编辑 s 是替换 , 因为里边用了/ 所以它来当分隔符 sed -e "s,\(.*\)://[^/:]*\(:\?[0-9]*\)/\(.*\),\1${transport_suffix}://${target_node}\2/\3," \(.*\) 这是第一个域 也就是\1 ://[^/:]* 不知道你文本是什么样的,这是一个匹配的正则,表示匹配...

宾川县13568797768: 帮忙详细解释一下这句shell语句(path="`echo $0 | sed 's,//*,/,g'`")的意思,如题,并举例说明sed中加逗号的用法,(莫抄袭) -
艾废华仁:[答案] 日常咱们用sed 都是 sed 's/.*//g' 来进行操作.但是当需要替换的文本里含有'/'的时候, 我们也可以指定这个'/'分割的书写格式,比如使用','和'#'来代替'/' 但是这种替代,按照第一个来进行指定,并且在后边书写时,不可更改. 这个意思sed的意思就是吧...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网