我试图找到最好的正则表达式来从字符串中提取版本号。例如:
echo "Version 1.2.4.1 (release mode)" | sed -ne 's/.*\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p'
Run Code Online (Sandbox Code Playgroud)
这里的问题是它只有在版本号为“abcd”格式时才有效。如果有人决定添加或删除一个数字(“abcde”、“abc”),它就会中断。所以我想分解正则表达式并告诉 sed 我想要:
(1 个或多个数字后跟一个点)x 1 次或更多次,后跟一个数字。
我找不到如何“分组”“1 个或多个数字后跟一个点”,所以我可以告诉我至少需要一次该模式。我试过这个,但它不起作用:
\([0-9]\+\.\)\+
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?
以下命令在 Solaris 上工作正常(仅当最后一个字符为 ":" 时才删除行)
sed -e '/:$/d' < foo > foo.new
Run Code Online (Sandbox Code Playgroud)
如何在 perl 中做同样的事情?(原因是因为我不想创建一个新文件)
perl -i -pe 's/:$/d' foo
Substitution replacement not terminated at -e line 1.
Run Code Online (Sandbox Code Playgroud) 我有两个文件,一个包含模式列表,另一个需要根据这些模式进行更改。到目前为止,我一直在尝试
cat patterns.txt| xargs -n1| sed 's/patternfromfile/subtitution/'
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将 xargs 输入到 's/here//'
谢谢
sed至少可以说对我来说是陌生的。我想遍历一个 C 项目树并注释掉调用函数的每一行LogMsg()。可以实现以下目标的东西:
foreach: line within *.c
if: line contains "LogMsg"
prepend "//"
Run Code Online (Sandbox Code Playgroud)
或者。另外,我想看看我是否可以实现相反的目标,尽管我认为这可能会更困难。
我觉得这sed是完成这项工作的合适工具,但我不是批处理文本文件编辑方面的专家。有什么帮助吗?
我将创建一个 .sh 以使用其他文件的内容替换文件中的特定关键字。
sed 可用于替换关键字:
value="hello superuser"
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
Run Code Online (Sandbox Code Playgroud)
所以我尝试了以下方法:
value=$(<contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
Run Code Online (Sandbox Code Playgroud)
并收到以下错误消息:替代模式内未转义的换行符
请问这种情况怎么处理?
谢谢!
我有一个使用 SSH 在远程服务器上运行命令的脚本。我想将字符串添加Remote:到输出的每一行,但我不希望每一行都被延迟,直到整行可用。这是我的命令的输出:
$ myproject-db-push my_database_name 从数据库导出...完成 归档数据...完成 上传档案到远程...完成 在远程运行安装脚本 远程:将存档解压缩到临时目录...完成 远程:使用数据库:my_database_name 远程:删除集合: 远程:- my_collection_foo 远程:- my_collection_bar 远程:导入新数据...完成
在这种情况下,我是这样使用的sed:
echo "$INSTALLCMD" | ssh -T "deploy@$SERVER" | sed -u "s/^/Remote: /"
Run Code Online (Sandbox Code Playgroud)
问题是,正如我所解释的,没有部分行打印到屏幕上。如果我移除| sed零件,它会按预期工作。首先是这样写的:
正在导入新数据...
几秒钟后,该行完成:
正在导入新数据...完成
我假设sed只能逐行工作。我尝试将其设置为无缓冲,但它仍然等待整行。有没有另一种方法来实现这一点?
我想循环文件
for f in `grep -rsl "foo" . `: do sed -i -- "s/foo/bar/g" $f; done;
但由于文件名包含空格,因此只要找到空格,就会拆分文件名。
如何将文件名及其空格传递给do块?
使用sed到包含某些字符适用于字符串常量使用使文字很简单:
sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"
Run Code Online (Sandbox Code Playgroud)
但是如何对包含换行符的文本文件做类似的事情呢?
给定一个 CSV 文件,
h1 h2 h3
a b c
z x b
Run Code Online (Sandbox Code Playgroud)
如何使用命令行工具将第一个标头重命名为One第三个标头Three,即
One h2 Three
a b c
z x b
Run Code Online (Sandbox Code Playgroud) 我正在尝试将文本文件的内容添加到其他文本文件的中间,也就是在特定字符串之前。我使用以下命令在特殊字符串后添加文本,例如
sed '/line3/ r data.txt' file1.txt (this will add contents of data.txt to file1.txt after "line3" string.
我试图在特定字符串之前添加文件的内容。我不能保证行号,所以我不能使用那个方法。
例如,
<xa-datasource-property
name="URL">jdbc:oracle:thin:@domain.com:1521:ora12121</xa-datasource-
property>
<xa-datasource-property name="User">username</xa-datasource-property>
<xa-datasource-property name="Password">password</xa-datasource-property>
<!-- Uncomment the following if you are using Oracle 9i
<xa-datasource-property name="oracle.jdbc.V8Compatible">true</xa-
datasource-property>
-->
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-class-name>
</xa-datasource>
Run Code Online (Sandbox Code Playgroud)
我想在</xa-datasource>字符串之前添加 data.txt 的内容 。