我对这个东西相当新,我需要一个shell文件来遍历文件夹中的所有".xml"文件,并进行一些文本替换.到目前为止,我已经想出了这个:
sed "s/old_text/new_text/g" testfile.xml -i
Run Code Online (Sandbox Code Playgroud)
但是,我希望它在当前文件夹中的所有xml文件上运行,而不仅仅在"testfile.xml"上运行.此外,如何备份原始文件?
任何输入都受到欢迎!非常感谢!
以下脚本有效,但有什么用途declare $line?如果我删除它,它不起作用.
又什么的差异{} \;,并{} +在find命令?
awk '{print "old="$1" new="$2}' list.txt |\
while IFS= read line; do
declare $line
find /path -name '*.ext' -exec sed -i "s/\b$old\b/$new/" {} +
done
Run Code Online (Sandbox Code Playgroud) 我目前未解决的 bash 问题是如何替换类中的所有字符[:punct:],即
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]
Run Code Online (Sandbox Code Playgroud)
, 每个都有相同的字符,用反斜杠转义。例如,我想^h?e.l*l+o:成为\^h\?e\.l\*l\+o\:.
我可以用循环的多线方式来做到这一点。有没有可能以更简洁优雅的方式做到这一点?
谢谢,卢卡
如果我做
comment () { sed -i "/$1/s/^/$2 /g" $3 }
comment /dev/sysmsg '#' /tmp/1
comment '*.err' '#' /tmp/1
Run Code Online (Sandbox Code Playgroud)
带输入文件
*.err;kern.notice;auth.notice /dev/sysmsg
fff
ff
Run Code Online (Sandbox Code Playgroud)
然后它就像/在sed分隔符中那样断开,*也被视为正则表达式.
题
有没有办法使它健壮,所以输入字符串$1可以包含我想要的任何东西?或者我需要转移到Perl?
我绝不是 AppleScript 专家,但也过得去。sed我在尝试将一些 AppleScript 变量传递给命令以便根据变量替换文件中的某些文本时遇到了麻烦。
我在 AppleScript 中有两个对话框可以获取用户数据,并存储这些变量。myData- 这工作正常。
set myData to text returned of \xc2\xac\n (display dialog "Enter Your Data" with title \xc2\xac\n "Data Entry" default answer \xc2\xac\n "" buttons {"Continue\xe2\x80\xa6"} \xc2\xac\n default button 1 \xc2\xac\n ) \n\nset searchFor to quoted form of "data1"\nset searchFor2 to quoted form of "data2"\nset inputFile to "/Users/User1/Desktop/file.txt"\nset outputFile to "/Users/User1/Desktop/file1.txt"\n\ndo shell script quoted form of ("sed -i.bak s/" & searchFor & "/" & myData & "/g") & …Run Code Online (Sandbox Code Playgroud) 我有一个文件,每行都有不同的单词。我的目标是将第一个字符替换为大写字母并将第三个字符替换为“#”。
例如:football 将被交换为 -> Foo#ball
我尝试考虑使用 awk 和 sed。它对我没有帮助,因为(据我所知)sed 需要精确的字符输入,而 awk 可以打印所需的字符但不能更改它。