首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于编辑给定规则上的流的sed命令

用于编辑给定规则上的流的sed命令
EN

Stack Overflow用户
提问于 2012-05-17 19:37:08
回答 3查看 143关注 0票数 1

我有一个这样的输入流:

代码语言:javascript
复制
afs=1;bgd=1;cgd=1;djh=1;fgjhh=1;

现在我必须编辑这个流的规则是:(1)如果我们有

代码语言:javascript
复制
"djh=number;"

将其替换为

代码语言:javascript
复制
"djh=number,"

(2)否则将“string=number;”替换为

代码语言:javascript
复制
"string,"

我可以这样处理第二种情况:

代码语言:javascript
复制
sed 's/afs=1/afs,/g;s/dbg=1/dbg,/g;..... so on for rest

如何处理条件1?

"djh“数字可以是任何数字( 1,12,100),其他数字始终为1。

我使用的所有双引号仅供参考;输入流中没有双引号。"afs“也可以是"Afs”。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-17 20:01:16

代码语言:javascript
复制
sed -e 's/;/,/g; s/,djh=/,@=/; s/\([a-z][a-z]*\)=[0-9]*,/\1,/g; s/@/djh/g'

这将执行以下操作

使用带有djh的所有低机箱strings

  • replace
  1. 中的,
  2. replace =number替换,
  3. replace @中的所有;

这将为您的输入生成afs,bgd,cgd,djh=1,fgjhh,。当然,您可以用任何其他字符替换djh,这样可以更容易地匹配其他字符串。这仅仅是为了说明这个想法。

票数 1
EN

Stack Overflow用户

发布于 2012-05-17 20:01:35

这可能对你有用:

代码语言:javascript
复制
echo "afs=1;bgd=1;cgd=1;djh=1;fgjhh=1;" |
sed 's/^/\n/;:a;/\n\(djh=[0-9]*\);/s//\1,\n/;ta;s/\n\([^=]*\)=1;/\1,\n/;ta;s/.$//'
afs,bgd,cgd,djh=1,fgjhh,

解释:

该方法使用一个惟一的标记(\n是一个很好的选择,因为它不能出现在模式空间中,因为它被sed用作行分隔符)作为锚点,以便在整个输入字符串中进行比较。它速度很慢,但如果需要多个异常,它可以扩展。

将标记放在字符串s/^/\n/

  • Name a

  • label :a

  • Match
  • (S) /\n\(djh=[0-9]*\)/
  • If exception
    • 前面,必要时替换。也沿着/s//\1,\n/
    • If撞上标记,上面是真的,中断到循环,标记为ta
    • Match,正常和替换。也沿着s/\n\([^=]*\)=1;/\1,\n/
    • If颠簸标记上面的是真的中断到循环标签ta
    • All done移除标记s/.$//

或者:

代码语言:javascript
复制
echo "afs=1;bgd=1;cgd=1;djh=1;fgjhh=1;" | 
sed 's/\<djh=/\n/g;s/=[^;]*;/,/g;s/\n\([^;]*\);/djh=\1,/g'
afs,bgd,cgd,djh=1,fgjhh,

解释:

这很快,但不能扩展到多个异常:

将异常字符串替换为新行s/\<djh=/\n/g

  • Globaly替换正常条件s/=[^;]*;/,/g

  • Globaly使用异常字符串s/\n\([^;]*\);/djh=\1,/g

替换\n

注意:替换异常字符串时,请确保它以单词边界\<开头

票数 0
EN

Stack Overflow用户

发布于 2012-05-17 20:01:35

代码语言:javascript
复制
echo 'afs=1;bgd=1;cgd=1;djh=1;fgjhh=1;' | 
sed -e 's/\(djh=[0-9]\+\);/\1,/g' -e 's/\([a-zA-Z0-9]\+\)=1;/\1,/g'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10634991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档