发新话题
打印

如何使用一条sed语句修改2个变量??

如何使用一条sed语句修改2个变量??

如题,本人想做一个shell程序,功能是批量转换很多程序中的return=0变为return=1的同时将其余的return=1变为return=0,目的实现这2个返回值的颠倒,各位有什么办法吗?在此请教大家了      

TOP

好像很难。。。
如何区分return=0是不是被替换了的呢
sed好像没有这类判断      
面包会有的 女人也会有的
_______________________

TOP

FYI:
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=4259 $?=0]
; cat file
return=0
return=1
return=1
return=0
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=4259 $?=0]
; sed -e '/return=[01]$/y/01/10/' file
return=1
return=0
return=0
return=1
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=4259 $?=0]
; sed -e '/return=[01]$/ { s/0/1/; t; s/1/0/; }' file
return=1
return=0
return=0
return=1
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=4259 $?=0]
; bye
      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

非常感谢您的回答       

TOP

dearvoid第二种方法有点问题
复制内容到剪贴板
代码:
$ cat file
return=0    return=1
return=1    return=0
return=1    return=0
return=0    return=1

$  sed -e '/return=[01]/ { s/0/1/; t; s/1/0/; }' file
return=1    return=1
return=1    return=1
return=1    return=1
return=1    return=1
      
面包会有的 女人也会有的
_______________________

TOP

仅作示例, 视文件的具体格式而定

[ 本帖最后由 dearvoid 于 2008-5-21 09:16 编辑 ]      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

在此回一下楼主的pm
刚开始时, 没有想到sed的y命令, 总想着要判断一下0,1
看完dearvoid的回帖后, 惊叹, 原来是这么简单

不过再仔细考虑了一下
如果行中还更多的数字, 那替换后估计是不是我们想要的结果
因为好像没法只替换在return=后的单个数字
(对sed没有那么熟悉, 所以用不肯定的说法, 而且dearvoid也只是简单示例了,并没说做不到

附上比较土的Perl解法(很土地判断了0和1)
复制内容到剪贴板
代码:
$ cat foo
return=0    return=1
return=1    return=0
return=1    return=0
return=0    return=1

$ perl -lpe ' s/(return=)([0|1])\b/$1 . ($2 ? 0 : 1)/ge' foo
return=1    return=0
return=0    return=1
return=0    return=1
return=1    return=0
[ 本帖最后由 li-jiahuan 于 2008-5-21 22:22 编辑 ]      
面包会有的 女人也会有的
_______________________

TOP

运用最平凡的交换两个变量值的方法:
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=29038 $?=0]
; cat file
return=0 return=1
return=1 return=0
return=1 return=0
return=0 return=1
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=29038 $?=0]
; cat file.sed
s/return=0\>/return=__0__/g
s/return=1\>/return=0/g
s/return=__0__\>/return=1/g
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=29038 $?=0]
; sed -f file.sed file
return=1 return=0
return=0 return=1
return=0 return=1
return=1 return=0
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=29038 $?=0]
; bye
      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

如果有人反驳说这不是一条 sed 语句的话, 我可以改写成一条, 不过比较长了点儿       
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

good
学习了:)      
面包会有的 女人也会有的
_______________________

TOP

发新话题