![](/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.