- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一堆conf文件,可以描述为两种类型:
类型 1(典型的类似 conf 文件的 ini 文件):
[server]
# Protocol (http, https)
;protocol = http
# The ip address to bind to, empty will bind to all interfaces
;http_addr = 192.168.33.2
# The http port to use
;http_port = 3000
类型 2(格式错误的 conf 文件):
###
### [http]
###
[http]
# Determines whether HTTP endpoint is enabled.
# enabled = true
# The bind address used by the HTTP service.
# bind-address = ":8080"
对于 Type1 conf 文件,我可以成功地将 crudini p.a 等工具与 crudini --set filename.conf server protocol https
一起使用,它实际上在服务器部分下添加了一个新条目,而不是取消对现有条目的注释。只要它能正常工作。
crudini 对类型 2 文件失败并出现解析错误,因为 conf 文件不是正确的 ini 文件。对于这些,我尝试使用 sed 但失败了。
我想要实现的是使用一个脚本/工具来修改这两种类型的文件。也许一个好的方法是:
;
或 #
和部分名称开头的行;
或 #
开头,替换整行(这也去掉了空格并将其插入到相同位置)我找到了很多脚本,其中有很多代码,但需要一个使用 Docker conf 文件的小型解决方案。
你能帮我找到一个优雅的解决方案吗?
最佳答案
这里。向前支付。腿部工作由 gawk 处理。我使用 --posix
开关对其进行了测试,因此我认为它也应该适用于 mawk 和其他 awk 变体。
脚本将引用包含空格和等号的值,以及引用被替换值的值。我不熟悉 Docker 文件,但由于在您的第二个示例中引用了“:8000”,我认为引用可能很重要。
#!/bin/bash
usage() {
echo "Usage: $(basename $0) -s section -i item -v value filename"
exit
}
export LC_ALL=C
while getopts "s:i:v:" i || (( $# )); do {
case $i in
s) section="$OPTARG";;
i) item="$OPTARG";;
v) value="$OPTARG";;
?) [[ -f $1 ]] && filename="$1";shift;;
esac
}; done
[[ -z "$section" ]] || [[ -z "$item" ]] || [[ -z "$filename" ]] && usage
[[ -w "$filename" ]] && {
tmpfile="$(mktemp -p /dev/shm)"
[[ $(whoami) = "root" ]] && chown --reference="$filename" "$tmpfile"
chmod --reference="$filename" "$tmpfile"
} || {
echo "Invalid filename: $filename"
usage
}
cleanup() {
[[ -f "$tmpfile" ]] && rm -f "$tmpfile"
exit
}
trap cleanup EXIT
awk -v section="$section" -v item="$item" -v value="$value" '
function quote(str) { return "\"" str "\"" }
/^\[[^\]]+\]/ {
if (flag) {
printf "%s = %s\n", item, value ~ /[[:space:]=]/ ? quote(value) : value
flag = 0
}
else flag = (section == substr($0, 2, index($0, "]") - 2))
}
$0 ~ ("^[[:space:]#;]*" item "[[:space:]]*=") {
if (flag) {
$0 = sprintf("%s = %s", item, /"/ || value ~ /[[:space:]=]/ ? quote(value) : value)
flag = 0
}
}
1
END { if (flag) printf "%s = %s", item, value ~ /[[:space:]=]/ ? quote(value) : value }
' "$filename" >"$tmpfile"
[[ -s "$tmpfile" ]] && mv "$tmpfile" "$filename" || echo "Something went horribly wrong."
关于linux - 在 dockerfile 中使用 sed 或 awk 编辑 conf 文件并更改值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956912/
我有一个功能是转换 ADO Recordset 进入html: class function RecordsetToHtml(const rs: _Recordset): WideString; 该函
经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以看到我的研究历史here) 当用户访问时,我运行此代码: $entropy=sha1(microtime().$pepper.$_SERVE
给定一个无序列表 List ,我需要查找是否存在 String与提供的字符串匹配。 所以,我循环 for (String k : keys) { if (Utils.keysM
我已经搜索过这个问题,但没有找到我正在寻找的答案。 基本上,我想将类构造函数包装在 try/except 子句中,以便它忽略构造函数内特定类型的错误(但无论如何都会记录并打印它们)。我发现做到这一点的
我有一组三个数字,我想将一组数字与另一组数字进行比较。即,第一组中的每个数字小于另一组中的至少一个数字。需要注意的是,第一组中的下一个数字必须小于第二组中的不同数字(即,{6,1,6} 对 {8,8,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
首先介绍一下背景: 我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一
我正在尝试在我的上网本上运行 Eclipse 以便能够为 Android 进行开发。 您可能已经猜到了,Eclipse 非常慢,并且不容易有效地开发。 我正在使用 Linux Ubuntu 并且我还有
for row, instrument in enumerate(instruments): for col, value in enumerate(instrument):
return not a and not b ^ 我如何以更好的格式表达它 最佳答案 DeMorgan's Law , 也许? return not (a or b) 我认为在这一点上已经足够简单了
我正在尝试让 Font Awesome 图标看起来更 slim https://jsfiddle.net/cliffeee/7L6ehw9r/1/ . 我尝试使用“-webkit-text-strok
假设我有一个名为 vals 的数据框,如下所示: id…………日期…………min_date…… .........最大日期 1…………2016/01/01…………2017/01/01…………2018/
是否有更 Pythonic 的方式来做到这一点?: if self.name2info[name]['prereqs'] is None: se
我有一个函数可以将一些文本打印到它接收到的 ostream&。如果 ostream 以终端为目标,我想让它适应终端宽度,否则默认为某个值。 我现在做的是: 从 ostream 中获取一个 ofstre
这个问题在这里已经有了答案: Should a retrieval method return 'null' or throw an exception when it can't produce
我有这个 bc = 'off' if c.page == 'blog': bc = 'on' print(bc) 有没有更 Pythonic(和/或更短)的方式在 Python 中编写? 最佳
输入:一个包含 50,000 行的 CSV;每行包含 910 列值 0/1。 输出:运行我的 CNN 的数据框。 我编写了一个逐行读取 CSV 的代码。对于每一行,我将数据分成两部分,称为神经元(90
据我所知,with block 会在您退出 block 后自动调用 close(),并且它通常用于确保不会忘记关闭一个文件。 好像没有技术上的区别 with open(file, 'r+') as f
我有一个使用 Entity Framework V6.1.1 的 MVC 5 网站。 Entity Framework DbContext 类和模型最初都在网站项目中。这个项目有 3 个 DbCont
我是编程新手,在尝试通过将 tableView 和关联 View 的创建移动到单独的类并将委托(delegate)和数据源从 VC 移动到单独的类来精简我的 ViewController 时遇到了一些
我是一名优秀的程序员,十分优秀!