标签: replace

从命令行替换文件中的整行

我有一个文本文件,其中有一些与此类似的内容:

# 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 …

command-line sed string line-editor replace

5
推荐指数
1
解决办法
3172
查看次数

如何在最后一个配置行后插入文本?

我必须自动在配置文件中插入一行,但需要注意的是,如果页脚存在,它应该插入多行页脚注释和任何前面的空行或纯空白行之前。也就是说,应该在最后一个配置行之后立即插入新行,从而与原始文件形成单行差异。在伪代码中:

  1. 转到文件末尾。
  2. 返回到第一行(即文件中的最后一行)配置行(即非空行、仅包含空格、仅注释或空格后跟注释的行)。
  3. 在当前行后插入文本。

配置行的扩展正则表达式: ^\s*[^[:space:]#]

任何常见的 *nix 工具,例如sed, awk,edex都应该可以工作。


可能的解决方案及其问题:

  • 使用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)

text-processing replace

5
推荐指数
1
解决办法
344
查看次数

如何用sed模拟“替换abb a”?

我正在尝试模拟一个替换命令,该命令使用 sed 脚本交换两个字符,但显而易见的选择是:

sed -e 's/a/b/g' -e 's/b/a/g' 
Run Code Online (Sandbox Code Playgroud)

不起作用。你能指出我如何正确地做到这一点吗?

sed text-processing replace tr

5
推荐指数
2
解决办法
1090
查看次数

如何搜索和替换与多个文件的替换列表匹配的字符串

我有一个文件,例如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)

如何使用上述映射大规模执行此操作?我已经阅读了这个问题,但不太明白。

sed find search replace

5
推荐指数
1
解决办法
6815
查看次数

如何用增量编号替换匹配行中的所有第一次出现?

我有一个这样的文件

...
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)

awk shell-script text-processing replace

5
推荐指数
1
解决办法
1080
查看次数

更换相同的 NIC 卡会创建 eth1 而不是在 Ubuntu 中使用 eth0

我换了一个品牌和型号完全相同的 NIC 卡。Ubuntu 11.04 的设置过程非常简单和简单,所以我认为它足够聪明来设置替换卡。但是,它为替换卡提供了一个新名称,eth1即我所有脚本所引用的位置eth0,更不用说操作系统中eth0可能存在的其他任何地方。我是否被迫追踪每个eth0参考并将其更改为eth1或者有没有办法将替换卡重命名回eth0

ubuntu ethernet replace

4
推荐指数
1
解决办法
6854
查看次数

将基因型转换为 0/1

我有一个文件,看起来像:

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 …

awk text-processing replace

4
推荐指数
1
解决办法
381
查看次数

从文件中删除长字符串

我服务器上的文件已损坏。我想从包含它的所有 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:无效的反向引用”尽管转义 \![]$

如何首先找到包含整个字符串的所有文件,然后如何从每个文件中删除文本?

grep sed find text-processing replace

4
推荐指数
1
解决办法
674
查看次数

使用 find 和 sed 替换多个文件中的字符串

所以我得出的结论是,为了递归替换目录中字符串的所有实例(仅适用于 .java 扩展文件),我需要使用

find . -type f -name "*.java" -exec sed -i 's/original/result/g' {} +
Run Code Online (Sandbox Code Playgroud)

但是,如果我要替换的字符串包含 ,我该怎么办/

例如,我想/*Comment*/用几个普通单词替换 string ,我应该使用什么分隔符,以便 sed 正常工作?

sed find recursive replace

4
推荐指数
2
解决办法
1万
查看次数

更改 csv 文件中的分隔符

我有一个用逗号 ( ,)分隔的输入文件。有一些用双引号括起来的字段中包含逗号。这是示例行

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)

awk text-processing replace

4
推荐指数
1
解决办法
1599
查看次数