这sed命令
echo 'a' | sed 's/a/b/'
输出
b a
这是正确的,还是应该生成一个b
?
更新
我被困在运行中的三星 Tab S2 中安卓6.0.1和adb shell
uname -a
Linux localhost 3.10.9-8374498 #1 SMP PREEMPT Fri Jul 8 14:31:31 KST 2016 armv7l
sed --version
This is not GNU sed version 9.0
type sed
sed is a tracked alias for /system/bin/sed
答案1
我当然希望该命令能够自行echo 'a' | sed 's/a/b/'
打印,而不是像您的示例那样打印。b
b a
事实上,当我在最近的 Android 上运行该命令时adb shell
,我得到了预期的结果:
$ adb shell
android:/ $ echo 'a' | sed 's/a/b/'
b
与您的设备相比,这是在不同的设备上(有关特定版本,请参阅下面的参考)。
我想不出什么会生成输出b a
(替代、空格、原始)。在深入了解之前,最好绝对确保这就是您真正看到的内容 - 完全按照所写的内容逐个按键(不要粘贴)键入整个命令。
如果它确实生成了该输出,我只能想象它来自系统中存在的错误。但是哪个错误在哪里呢?
缩小问题范围
首先,确保 shell 的管道按预期工作。尝试将一个不带参数的简单命令通过管道传输到另一个不带参数的简单命令,例如env | head
。
如果您将 sed 换成tr a b
甚至head
您会知道这是否是sed
.
您也可以尝试sed
在管道之外。sed
作为交互式命令单独运行,并a在其中键入输入(如 )。完成后按Ctrl-D表示文件结束。
工作环境
shell是MirBSD KSH( mksh
),sed
是Toybox的sed命令。
$ adb shell
android:/ $ sed --version
This is not GNU sed version 9.0
android:/ $ type sed
sed is a tracked alias for /system/bin/sed
android:/ $ ls -l /system/bin/sed
lrwxr-xr-x 1 root shell 6 2009-01-01 17:00 /system/bin/sed -> toybox
$ toybox --version
0.7.0-a324bde36bd6-android
$ echo $KSH_VERSION
@(#)MIRBSD KSH R52 2016/01/20
答案2
注意:欢迎其他答案(我不会接受这个)
我有以下内容配置我想要设置的文件tls=true
ip=192.168.1.1
端口=08
tls=假
我的解决方法如下(仅适用于尾部的 b/c 设置配置)
tls=$(sed -n '/false/p' config)
sed -i '/false/d' config
echo ${tls/false/true} >> config
答案3
we can do it by awk
echo "a" | awk '{gsub("a","b",$1);print $1}'
b