java - 对于 Java/Android 使用 'sed"命令更改一行

标签 java android sed

我正在尝试使用 Android 的“sed”命令更改行。我已使用以下命令,但它不起作用。请注意,我的文件位置位于 Android 设备的“root”文件夹中。我也想将值从 20 更改为 10。

String[] cmd = { "su", "#!/bin/bash\n", 
       "sed -i 's/p2p_oper_channel/replacing_text/g' data/misc/wifi/p2p_supplicant.conf" };

Process p = Runtime.getRuntime().exec(cmd); 

有人可以帮我解决这个问题吗?

最佳答案

像这样使用sed命令只会执行替换,但会输出到stdout。您可能想将替换应用到原始文件。为了实现这一点,您需要向 sed 提供一个选项,即用于内联更改-i 选项。

因此,您的命令应如下所示:

sed -i 's/pattern_text=20/text_to_replace=10/g' /data/location/to/file.txt

编辑

根据您最近的详细信息,这里有一个应该有效的命令:

sed -i 's/\(p2p_oper_channel=\)[0-9]\+/\1x/' /data/misc/wifi/p2p_supplicant.conf

注意,\1部分表示在\(\)之间插入该部分,即字符串p2p_oper_channelx 将插入一个 x。将 x 更改为您要插入的数字,而不是当前数字。

这是最灵活的方式,现在让我们采用最静态的方式。

sed -i 's/p2p_oper_channel=[0-9]\+/p2p_oper_channel=x/' /data/misc/wifi/p2p_supplicant.conf

再次将 x 替换为所需的值。

编辑2

感谢Wintermute的输入,我们发现Java中需要对转义符号进行转义。重新使用新的 sed 函数:

sed -i 's/p2p_oper_channel=[0-9]\\+/p2p_oper_channel=x/' /data/misc/wifi/p2p_supplicant.conf

关于java - 对于 Java/Android 使用 'sed"命令更改一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506742/

相关文章:

java - Struts2 - 延迟 Action 执行

android - 无法在 Android 4.2 的 appwidget 中将位图写入 parcel blob

Android:在 SQLite 中使用 UUID 作为主键

bash - 找到每行一个项目的两个文本文件之间的差异

java - 返回二维数组 java.lang.Object 中任意对象的索引。

java - 如何禁用窗体的 struts 2 表生成?

java - 如何读写SD卡?

bash - 将 sed 放入 "for cycle"

linux - 如何转义 sed 输入文件

java - 如何创建我自己的 Apache Camel Quickfixj 组件分支?