我有一个文本文件,其中有一些与此类似的内容:
# General information about the project.
project = u'Py6S'
copyright = u'2012, Robin Wilson'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '0.5'
# The full version, including alpha/beta/rc tags.
release = '0.5'
Run Code Online (Sandbox Code Playgroud)
我想version = '0.5'用version = X其中 X 是给脚本的命令行参数替换该行,然后对该release =行执行相同的操作。
我可以调用一个简单的命令来进行这种替换吗?我已经研究sed了一下,但似乎 sed …
我必须自动在配置文件中插入一行,但需要注意的是,如果页脚存在,它应该插入在多行页脚注释和任何前面的空行或纯空白行之前。也就是说,应该在最后一个配置行之后立即插入新行,从而与原始文件形成单行差异。在伪代码中:
配置行的扩展正则表达式: ^\s*[^[:space:]#]
任何常见的 *nix 工具,例如sed, awk,ed或ex都应该可以工作。
可能的解决方案及其问题:
tac两次使其成为向前搜索问题而不是向后搜索问题。这意味着我必须将结果存储在一个临时文件中,然后替换原始文件,而不是在单个命令中执行此操作。sed -i与逆转伎俩。这意味着将整个文件存储在内存中。ex -c '1' -c '?^\s*[^[:space:]#]?' -c $'a\nmy new line\n.' -c 'wq' /path,我也了解将完整文件存储在内存中。有没有解决这两个问题的解决方案?
示例起始文件:
# Universe configuration
#
pi = 3 # A good #
e = mc**2 # To within a hair
[cut 200 trillion lines]
#
# END
#
Run Code Online (Sandbox Code Playgroud)
示例输入:
sol { mass = …Run Code Online (Sandbox Code Playgroud) 我正在尝试模拟一个替换命令,该命令使用 sed 脚本交换两个字符,但显而易见的选择是:
sed -e 's/a/b/g' -e 's/b/a/g'
Run Code Online (Sandbox Code Playgroud)
不起作用。你能指出我如何正确地做到这一点吗?
我有一个文件,例如map.txt,包含搜索字符串列表和相应的替换:
search -> replacement
bigBone -> bb
fishMarket -> fm
dogCollar -> dc
...
Run Code Online (Sandbox Code Playgroud)
我需要在文件夹中递归地搜索和替换与上述所有文件匹配的所有字符串,但符号链接除外。我知道如何一次做一个这样的:
$ find /some/folder -type f -exec sed -i 's/old_text/new_text/g' {} \;
Run Code Online (Sandbox Code Playgroud)
如何使用上述映射大规模执行此操作?我已经阅读了这个问题,但不太明白。
我有一个这样的文件
...
1562 first part
1563 H col3 H col4
1564 H col3 H col4
...
3241 H col3 H col4
3242 third part
...
Run Code Online (Sandbox Code Playgroud)
我只想将H每一行中的第一个替换为H#,#是它的出现次数。输出应该是:
...
1562 first part
1563 H1 col3 H col4
1564 H2 col3 H col4
...
3241 H1652 col3 H col4
3242 third part
...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过:
max=`grep -c ' H ' b`
while [[ "$i" -le $max ]];do
grep -m $i ' H ' b|tail -n1|sed "s/H/H$i/1"
let i=i+1 …Run Code Online (Sandbox Code Playgroud) 我换了一个品牌和型号完全相同的 NIC 卡。Ubuntu 11.04 的设置过程非常简单和简单,所以我认为它足够聪明来设置替换卡。但是,它为替换卡提供了一个新名称,eth1即我所有脚本所引用的位置eth0,更不用说操作系统中eth0可能存在的其他任何地方。我是否被迫追踪每个eth0参考并将其更改为eth1或者有没有办法将替换卡重命名回eth0?
我有一个文件,看起来像:
1 rs6687776 1020428 T C T C T C C C T C C C T C
Run Code Online (Sandbox Code Playgroud)
第 4 和第 5 列是该位点的两个不同的可能等位基因。我需要更改第 6 列以显示0是否有T等位基因以及1是否有C等位基因。我的文件是 20805 x 459。所以应该看起来像:
1 rs6687776 1020428 T C 0 1 0 1 1 1 0 1 1 1 0 1
Run Code Online (Sandbox Code Playgroud)
我试过了:
cat file | while read line
do if [ [,6-] = [,4] ]
then
echo "0"
echo "1"
fi
done
Run Code Online (Sandbox Code Playgroud)
不过,我刚刚结束了与交替的一个文件0 …
我服务器上的文件已损坏。我想从包含它的所有 PHP 文件中删除一个 13000 个字符串。
字符串看起来像:
?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER[ ... $qhroczocgv=$qjhvvbyvyv; $qhroczocgv=(729-608); $boxknervrr=$qhroczocgv-1; ?>
Run Code Online (Sandbox Code Playgroud)
为简洁起见插入省略号。
当我使用 搜索字符串时grep,我得到一个
grep:无效的反向引用”尽管转义 \![]$
如何首先找到包含整个字符串的所有文件,然后如何从每个文件中删除文本?
所以我得出的结论是,为了递归替换目录中字符串的所有实例(仅适用于 .java 扩展文件),我需要使用
find . -type f -name "*.java" -exec sed -i 's/original/result/g' {} +
Run Code Online (Sandbox Code Playgroud)
但是,如果我要替换的字符串包含 ,我该怎么办/?
例如,我想/*Comment*/用几个普通单词替换 string ,我应该使用什么分隔符,以便 sed 正常工作?
我有一个用逗号 ( ,)分隔的输入文件。有一些用双引号括起来的字段中包含逗号。这是示例行
123,"ABC, DEV 23",345,534.202,NAME
Run Code Online (Sandbox Code Playgroud)
我需要删除所有没有出现在双引号内的逗号,~
所以输出应该是这样的:
123~"ABC, DEV 23"~345~534.202~NAME
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它给了我反向输出:
awk -F '"' -v OFS='' '{ for (i=0; i<= NF; ++i) gsub(",","~",$i) } 1' test.txt
123,ABC~ DEV 23,345,534.202,NAME
Run Code Online (Sandbox Code Playgroud) replace ×10
sed ×5
awk ×3
find ×3
command-line ×1
ethernet ×1
grep ×1
line-editor ×1
recursive ×1
search ×1
shell-script ×1
string ×1
tr ×1
ubuntu ×1