【问题标题】:How to remove newline and carriage return char from a variable used in sed command?如何从 sed 命令中使用的变量中删除换行符和回车符?
【发布时间】:2015-12-09 12:57:54
【问题描述】:

我正在尝试为 android 创建一个 shell 脚本。
在此脚本中,我想在 xml 文件中编辑时间戳键 但时间戳变量总是留下换行符。

我正在使用来自 busybox 的 sedtr 命令。 ":" 是分隔符
我在 tr 中尝试过 \r,\n 但没有用。

我的脚本代码:

current_time=$(date +%s | busybox tr -d '\r\n')
busybox sed -i "s:name=\"timeStamp3\" value=\"[0-9]*\":name=\"timeStamp3\" value=\"$current_time\":" ./cocos2dxprefsFile.xml

输入:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <int name="classic_ufg_b2" value="-10" />
    <int name="timeStamp3" value="1441985760" />
    <string name="lastName">Albert</string>
    <int name="classic_ufg_s" value="262" />
</map>

预期输出:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <int name="classic_ufg_b2" value="-10" />
    <int name="timeStamp3" value="**currenttime**" />
    <string name="lastName">Albert</string>
    <int name="classic_ufg_s" value="262" />
</map>

电流输出

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <int name="classic_ufg_b2" value="-10" />
    <int name="timeStamp3" value="**currenttime**
    " />
    <string name="lastName">Albert</string>
    <int name="classic_ufg_s" value="262" />
</map>

【问题讨论】:

  • 这没有意义。 $() 默认去掉换行符,你甚至不需要 tr 那里。尝试使用foo=$(echo bar); echo foobar | busybox sed "s/foo/$foo/" 进行测试。这会返回barbar吗?
  • @ThomasDickey 是的,我知道。我在busybox(包括busybox sh)上试过这个,进程替换仍然会去除尾随空格。它可能归结为 OP 的 android 上的 busybox 版本,但即使 $() 没有修剪它,tr 也应该。
  • 您可以证明tr 是不需要的:busybox sh -c 'echo "--$(date +%s)--"' 愉快地输出--1449159282--,没有杂散的换行符。无论我如何尝试,我都无法重现报告的问题。

标签: shell sed tr busybox


【解决方案1】:

我只是想知道你为什么使用 busybox.. 我没有这个命令。 以下脚本适用于您..您可以尝试一下。

   $ cat test.sh 
current_time=$(date +%s)
cat cocos2dxprefsFile.xml | sed "/timeStamp3/{
    s/\(value=\)\"[0-9]*\"/\1\"$current_time\"/
}"


$ bash test.sh 
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <int name="classic_ufg_b2" value="-10" />
    <int name="timeStamp3" value="1449157053" />
    <string name="lastName">Albert</string>
    <int name="classic_ufg_s" value="262" />
</map>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2011-09-23
    相关资源
    最近更新 更多