簡體   English   中英

sed 對於包含字符串的特定行

[英]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 個名為currTextnewText的變量,它們的名稱本身是自解釋的,可以在這些變量中放置文本,我們可以在具有.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM