我有一个包含以下内容的文件:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
Run Code Online (Sandbox Code Playgroud)
我需要制作一个脚本,将第一行中的“name”更改为“something”,将第二行中的“password”更改为“somethingelse”,将第三行中的“name”更改为“somethingdifferent”。我不能依赖这些在文件中出现的顺序,所以我不能简单地用“something”替换第一次出现的“name”,用“somethingdifferent”替换第二次出现的“name”。我实际上需要搜索周围的字符串,以确保我找到并替换了正确的东西。
到目前为止,我已尝试使用此命令来查找和替换第一个“名称”出现:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
Run Code Online (Sandbox Code Playgroud)
但是它不起作用所以我认为其中一些字符可能需要转义等。
理想情况下,我希望能够使用正则表达式来匹配两个“用户名”出现并仅替换“名称”。像这样的东西,但有sed:
<username>.+?(name).+?</username>
Run Code Online (Sandbox Code Playgroud)
并将括号中的内容替换为“某物”。
这可能吗?
这可能与检测操作系统有关,但我特别需要系统上当前使用的 init 系统。
Fedora 15 和 Ubuntu 现在使用 systemd,Ubuntu 过去使用 Upstart(很长时间默认直到 15.04),而其他人使用 System V 的变体。
我有一个应用程序,我正在编写它作为跨平台守护程序。初始化脚本是根据可以在配置时传入的参数动态生成的。
我想做的只是为他们正在使用的特定初始化系统生成脚本。这样,安装脚本可以在没有参数的情况下以 root 身份合理运行,并且守护进程可以自动“安装”。
这是我想出的:
这样做的最佳跨/平台方式是什么?
有点相关,我可以依赖 bash 来支持大多数 *nix 还是依赖于发行版/操作系统?
目标平台:
我的查询是提取双引号之间的值""。样本输入是:
10.219.41.68 - - - [11/Jun/2014:10:23:04 -0400] Sec:0 MicSec:1797 "GET /balancer-manager HTTP/1.1" 200 28980 "-" "curl/7.15.5 (i386) -redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"
我有很大的日志文件,所以每行的值可能会有所不同,需要提取第一次出现双引号之间的值......
预期输出:
GET /balancer-manager HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
任何人有任何想法,然后请提出建议。
我正在使用screen /dev/tty-MyDevice查看串行端口上的流量。
按Ctrl+D不会导致屏幕终止。
我必须做什么才能终止它?
rsync假设源文件系统在 rsync 运行时很可能被修改,当源文件系统被挂载和可写时使用它是否安全?我认为在竞争条件下我可能不会得到最新的修改,但是否有任何损坏的风险?
如果我使用trap如在http://linuxcommand.org/wss0160.php#trap上描述的那样在退出之前捕获 ctrl-c(或类似的)和清理,那么我正在更改返回的退出代码。
现在这可能不会在现实世界中产生影响(例如,因为退出代码不可移植,而且在进程终止时的默认退出代码中讨论的那样并不总是明确的?)但我仍然想知道是否有真的没有办法阻止这种情况并返回中断脚本的默认错误代码吗?
示例(在 bash 中,但不应将我的问题视为特定于 bash 的问题):
#!/bin/bash
trap 'echo EXIT;' EXIT
read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _
trap 'echo SIGINT; exit 1;' INT
read -p 'If you ctrl-c me now my return code will be 1. ' _
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./test.sh # doing ctrl-c for 1st read
If you ctrl-c me now my return code will be the …Run Code Online (Sandbox Code Playgroud) 我很好奇硬件如何与操作系统交互并看到这篇文章:键盘输入和文本输出如何工作?
似乎很多魔法都发生在 /dev/input 目录中。我决定看看我自己的操作系统(Ubuntu 16.10),看看我能找到什么。所有这些文件都列为 0 字节,当我这样做时,我会sudo cat mouse0 | hexdump -C得到大量如下所示的十六进制数据:
00000000 b3 82 8a 58 00 00 00 00 53 74 09 00 00 00 00 00 |...X....St......|
00000010 01 00 1c 00 00 00 00 00 b3 82 8a 58 00 00 00 00 |...........X....|
00000020 53 74 09 00 00 00 00 00 00 00 00 00 00 00 00 00 |St..............|
00000030 b6 82 8a 58 00 00 00 00 06 56 …Run Code Online (Sandbox Code Playgroud) 我应该使用http或ftp链接/etc/apt/sources.list吗?
我的意思是使用类似的东西
deb ftp://ftp.debian.org/debian/ squeeze main contrib. non-free
deb-src ftp://ftp.debian.org/debian/ squeeze main contrib. non-free
Run Code Online (Sandbox Code Playgroud)
比使用更好或更差
deb http://ftp.debian.org/debian/ squeeze main contrib. non-free
deb-src http://ftp.debian.org/debian/ squeeze main contrib. non-free
Run Code Online (Sandbox Code Playgroud)
?
我想作为apt用途wget去取东西,这是一样的,询问是否wget是更快的ftp。
在文本文件中,我想删除,(逗号)和"(引号)(仅当双引号包含以逗号分隔的数字时)。
56,72,"12,34,54",x,y,"foo,a,b,bar"
Run Code Online (Sandbox Code Playgroud)
预期输出
56,72,123454,x,y,"foo,a,b,bar"
Run Code Online (Sandbox Code Playgroud)
注意:我显示上面的行只是作为一个例子。我的文本文件包含多行如上,双引号中用逗号分隔的数字应该有所不同。那是,
56,72,"12,34,54",x,y,"foo,a,b,bar"
56,92,"12,34",x,y,"foo,a,b,bar"
56,72,"12,34,54,78,76,54,67",x,y,"foo,a,b,bar"
56,72,x,y,"foo,a,b,bar","12,34,54"
56,72,x,y,"foo,a,b,bar","12,34,54","45,57,84,92","bar,foo"
Run Code Online (Sandbox Code Playgroud)
预期输出:
56,72,123454,x,y,"foo,a,b,bar"
56,92,1234,x,y,"foo,a,b,bar"
56,72,12345478765467,x,y,"foo,a,b,bar"
56,72,x,y,"foo,a,b,bar",123454
56,72,x,y,"foo,a,b,bar",123454,45578492,"bar,foo"
Run Code Online (Sandbox Code Playgroud)
n双引号内有许多数字,以逗号分隔。并且还保留包含字符的双引号。
我喜欢sed文本处理工具。如果您sed为此发布任何解决方案,我很高兴。
shell-script ×3
sed ×2
shell ×2
awk ×1
backup ×1
concurrency ×1
csv ×1
debian ×1
devices ×1
exec ×1
exit ×1
gnu-screen ×1
init ×1
linux ×1
portability ×1
posix ×1
quoting ×1
rsync ×1
serial-port ×1
signals ×1
trap ×1
ubuntu ×1