sed '$' 匹配行首而不是行尾
sed '$' matching start of line instead of end
我正在尝试将“.tsv”附加到文件中一列文本的末尾。
您可以使用 sed 's|$|.tsv|' myfile.txt
轻松完成此操作
但是,这不适用于我的文件,我正试图弄清楚为什么以及如何修复它以使其有效。
我要编辑的栏目如下所示:
$ cut -f12 chickspress.tsv | sort -u | head
Adipose_proteins
Adrenal_gland
Cerebellum
Cerebrum
Heart
Hypothalamus
Ovary
Sciatic_nerve
Testis
Tissue
但是当我尝试使用sed
时,结果是错误的:
$ cut -f12 chickspress.tsv | sort -u | sed -e 's|$|.tsv|'
.tsvose_proteins
.tsvnal_gland
.tsvbellum
.tsvbrum
.tsvt
.tsvthalamus
.tsvy
.tsvtic_nerve
.tsvis
.tsvue
.tsvey
.tsvr
.tsv
.tsvreas
.tsvoral_muscle
.tsventriculus
.tsv
应该在行尾,而不是行首。
我认为可能存在一些空白错误,所以我尝试了这个 (macOS):
$ cut -f12 chickspress.tsv | sort -u | cat -ve
Adipose_proteins^M$
Adrenal_gland^M$
Cerebellum^M$
Cerebrum^M$
Heart^M$
Hypothalamus^M$
Ovary^M$
Sciatic_nerve^M$
Testis^M$
Tissue^M$
kidney^M$
liver^M$
lung^M$
pancreas^M$
pectoral_muscle^M$
proventriculus^M$
这个 ^M
看起来不对,它不存在于我的其他文件中,但我不确定它在这里代表什么或如何修复它或只是将此 sed
命令用于解决它。
我使用脚本中的 Python 的 csv.DictWriter
生成了此文件,我过去曾多次使用该脚本,但之前从未注意到其输出中出现此错误。 运行 在这种情况下在 macOS 上。
编辑: 根据 Ed 的评论,如果你想删除行最后的回车 returns 只有这样以下内容可能会有所帮助。
awk '{sub(/\r$/,"")} 1' Input_file > temp_file && mv temp_file Input_file
或
sed -i.bak '#s#\r$##' Input_file
通过执行以下操作删除控制 M 字符,然后尝试您的命令。
tr -d '\r' < Input_file > temp_file && mv temp_file Input_file
或者如果您的系统中有 dos2unix
实用程序,您也可以使用它来删除这些字符。
与awk
:
awk '{gsub(/\r/,"")} 1' Input_file > temp_file && mv temp_file Input_file
与sed
:
sed -i.bak 's#\r##g' Input_file
我正在尝试将“.tsv”附加到文件中一列文本的末尾。
您可以使用 sed 's|$|.tsv|' myfile.txt
但是,这不适用于我的文件,我正试图弄清楚为什么以及如何修复它以使其有效。
我要编辑的栏目如下所示:
$ cut -f12 chickspress.tsv | sort -u | head
Adipose_proteins
Adrenal_gland
Cerebellum
Cerebrum
Heart
Hypothalamus
Ovary
Sciatic_nerve
Testis
Tissue
但是当我尝试使用sed
时,结果是错误的:
$ cut -f12 chickspress.tsv | sort -u | sed -e 's|$|.tsv|'
.tsvose_proteins
.tsvnal_gland
.tsvbellum
.tsvbrum
.tsvt
.tsvthalamus
.tsvy
.tsvtic_nerve
.tsvis
.tsvue
.tsvey
.tsvr
.tsv
.tsvreas
.tsvoral_muscle
.tsventriculus
.tsv
应该在行尾,而不是行首。
我认为可能存在一些空白错误,所以我尝试了这个 (macOS):
$ cut -f12 chickspress.tsv | sort -u | cat -ve
Adipose_proteins^M$
Adrenal_gland^M$
Cerebellum^M$
Cerebrum^M$
Heart^M$
Hypothalamus^M$
Ovary^M$
Sciatic_nerve^M$
Testis^M$
Tissue^M$
kidney^M$
liver^M$
lung^M$
pancreas^M$
pectoral_muscle^M$
proventriculus^M$
这个 ^M
看起来不对,它不存在于我的其他文件中,但我不确定它在这里代表什么或如何修复它或只是将此 sed
命令用于解决它。
我使用脚本中的 Python 的 csv.DictWriter
生成了此文件,我过去曾多次使用该脚本,但之前从未注意到其输出中出现此错误。 运行 在这种情况下在 macOS 上。
编辑: 根据 Ed 的评论,如果你想删除行最后的回车 returns 只有这样以下内容可能会有所帮助。
awk '{sub(/\r$/,"")} 1' Input_file > temp_file && mv temp_file Input_file
或
sed -i.bak '#s#\r$##' Input_file
通过执行以下操作删除控制 M 字符,然后尝试您的命令。
tr -d '\r' < Input_file > temp_file && mv temp_file Input_file
或者如果您的系统中有 dos2unix
实用程序,您也可以使用它来删除这些字符。
与awk
:
awk '{gsub(/\r/,"")} 1' Input_file > temp_file && mv temp_file Input_file
与sed
:
sed -i.bak 's#\r##g' Input_file