![](/img/trans.png)
[英]Using sed to add character in a line which contains TWO specific Strings
[英]sed for specific line which contains a string
我有一个文件,例如
READS2b=/path1/path2/data/a_ACTTGA_L002_R2.fastq.gz.1
READS2b=/path1/path2/data/a_ACTTGA_L004_R2.fastq.gz.1
READS2b=/path1/path2/data/a_ACTTGA_L004_R2.fastq.gz
我只想将/path1/path2/data/
更改为/path4/path5/data/
包含.fastq.gz.1
的行。
在这里我应该得到:
READS2b=/path4/path5/data/a_ACTTGA_L002_R2.fastq.gz.1
READS2b=/path4/path5/data/a_ACTTGA_L004_R2.fastq.gz.1
READS2b=/path1/path2/data/a_ACTTGA_L004_R2.fastq.gz
我会用:
sed 's@/path1/path2/@path4/path5/@g' file.txt
但我不知道如何只针对.fastq.gz.1
行
您可以使用
sed '/\.fastq\.gz\.1$/s@/path1/path2/data/@path4/path5/data/@g' file.txt
查看sed
演示
这里,
/\.fastq\.gz\.1$/
查找以.fastq.gz.1
结尾的行s@/path1/path2/data@path4/path5/data/@g
仅在这些行上将/path1/path2/data/
替换为path4/path5/data/
。这可能对你有用(GNU sed):
sed '/\.fastq\.gz\.1/s#/path1/path2\(/data/\)/path4/path5\1#' file
关注包含.fastq.gz.1
的行并在模式匹配时替换。
如果您对awk
,请尝试以下操作。 在awk
解决方案中,我提出了 2 个名为currText
和newText
的变量,它们的名称本身是自解释的,可以在这些变量中放置文本,我们可以在具有.fastq.gz.1
的行中用 newText 全局替换 currText 值在里面。
awk -v currText="/path1/path2/data/" -v newText="/path4/path5/data/" '
/\.fastq\.gz\.1/{
gsub(currText,newText)
}
1
' Input_file
使用 GNU awk
:
awk '/fastq.gz.1/ {gsub(/path1/,"path4") gsub(/path2/, "path5")}'1 file
READS2b=/path4/path5/data/a_ACTTGA_L002_R2.fastq.gz.1
READS2b=/path4/path5/data/a_ACTTGA_L004_R2.fastq.gz.1
READS2b=/path1/path2/data/a_ACTTGA_L004_R2.fastq.gz
这个代码:
/fastq.gz.1/
,不是全部。gsub
替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.