如何使用sed命令替换类似" U.S.A。"的字符串。到" USA"或者" D.A.R.P.A。"致DARPA。 "不是字符串的一部分。
所以我的目标是只从大文本中替换缩写。
我试过 sed "s/.//g" file.txt >file2.txt
,但这取代了所有出现的点。
然后我尝试了一堆不同的组合,如:
sed "s/([A-Z]\.)+/[A-Z]/g" file.txt >file2.txt
这显然不起作用。
显然终端不接受()括号或嵌套括号
如果我想用非常具体的东西替换一个字母后跟一个点,我可以使用sed "s/[A-Z]/a/g" file.txt >file2.txt
答案 0 :(得分:1)
关注sed
可能会对您有所帮助,基于其逻辑sed
很简单sed s/old_value/new_value/g
。
echo "U.S.A." | sed 's/\.//g'
解决方案第二:由于OP已经改变了他的问题所以现在也添加了这个答案。 假设我们有以下Input_file。
cat Input_file
U.S.A. D.A.R.P.A.
fewqfewfew fwefjwefu1e13rvnoi.wbvwvnwv
D.A.R.P.A. wnvwnvnewv nwvnrwnvrwnvrw
awk --re-interval '
{
val=$0;
while(match(val,/([a-zA-Z]{1,}\.{1,}){1,}/)){
value=value1=substr(val,RSTART,RLENGTH);
gsub(/\./,"",value1);
sub(value,value1,$0);
val=substr(val,RSTART+RLENGTH)}
}
1
' Input_file
输出如下。
USA DARPA
fewqfewfew fwefjwefu1e13rvnoiwbvwvnwv
DARPA wnvwnvnewv nwvnrwnvrwnvrw
注意: 我的awk
是旧版本,如果你有最新版本的awk
,那么你不需要使用{{1}然后在上面的代码中。
答案 1 :(得分:1)
你可以试试这个sed
ui_print("-- Installing: Magisk-v16.0");
package_extract_dir("META-INF/ADD-ONS/Magisk-v16.0", "/tmp/Magisk-v16.0");
run_program("/sbin/busybox", "unzip", "/tmp/Magisk-v16.0/Magisk-v16.0.zip", "META-INF/com/google/android/*", "-d", "/tmp/Magisk-v16.0");
run_program("/sbin/busybox", "sh", "/tmp/Magisk-v16.0/META-INF/com/google/android/update-binary", "dummy", "1", "/tmp/Magisk-v16.0/Magisk-v16.0.zip");
delete_recursive("/tmp/Magisk-v16.0");
答案 2 :(得分:1)
假设OP想要删除大写字母后出现的点
$ s='U.S.A. foo.bar D.A.R.P.A. a.b.'
$ echo "$s" | sed 's/\([A-Z]\)\./\1/g'
USA foo.bar DARPA a.b.
$ # if ERE is available as -E or -r option
$ echo "$s" | sed -E 's/([A-Z])\./\1/g'
USA foo.bar DARPA a.b.
\([A-Z]\)
是capture group,\1
是对该匹配字符串的反向引用\.
由于.
是元字符,因此需要对其进行转义才能与之匹配答案 3 :(得分:1)
这可能适合你(GNU sed):
sed 's/\b\([[:upper:]]\)\b\./\1/g' file
这将删除前面带有单个字符大写单词的.
。