我有一个文件,在第一个字段后面需要一个分号分隔符,长度为4或5个字符。我尝试使用sed(修改了我发现的sed脚本),这是一个史诗般的失败......它在每个角色之间插入分号。我只需要在第一个字段的末尾添加一个分号。
以下是一些示例文字:
2A19 kRSUnicode 205.8
2FA1A kRSUnicode 206.2
2FA1B kRSUnicode 207.5
我希望的输出:
2A19; kRSUnicode 205.8
2FA1A; kRSUnicode 206.2
2FA1B; kRSUnicode 207.5
任何人都知道如何做到这一点?谢谢!
答案 0 :(得分:4)
选项卡和空格称为空格。这将用分号替换空白的第一个字符:
sed 's/[[:space:]]/;/'
# or
sed 's/[[:space:]]/; /' # preserves the space char.
这将用分号替换所有空格的第一个实例:
sed 's/[[:space:]]\{1,\}/;/'
这将用分号替换所有空格实例:
sed 's/[[:space:]]\{1,\}/;/g'
# or
tr '\t ' ';'
答案 1 :(得分:2)
如果您在分号后不关心任何事情,那么awk
$ awk '$0=$1";"' infile
2A19;
2FA1A;
2FA1B;
awk
awk '$1=$1";"' OFS='\t' infile
$ awk '$1=$1";"' OFS='\t' infile
2A19; kRSUnicode 205.8
2FA1A; kRSUnicode 206.2
2FA1B; kRSUnicode 207.5
答案 2 :(得分:0)
在您的问题中包含示例数据和输出确实很有帮助,但根据您所说的内容,以下内容将起作用
# replace the first space in a line with a semicolon.
printf "sample data1, data2 data3\n" \
| sed 's/ /;/'
生成输出
sample;data1, data2 data3
您可以使用
处理您拥有的任何文件sed 's/ /;/' file > newFile
或者如果你使用带有GNU sed的Linux
sed -i 's/ /;/' file
我希望这会有所帮助。
答案 3 :(得分:0)
sed 's/\(\s\+\)/;\1/' file
根据输入数据,您可以匹配第一个标签并在其前面添加;
。
[jaypal:~/Temp] cat file
2A19 kRSUnicode 205.8
2FA1A kRSUnicode 206.2
2FA1B kRSUnicode 207.5
[jaypal:~/Temp] sed 's/\(\s\+\)/;\1/' file
2A19; kRSUnicode 205.8
2FA1A; kRSUnicode 206.2
2FA1B; kRSUnicode 207.5
答案 4 :(得分:0)
你可以为每一行sed命令循环
echo "abcde I am a good boy" |sed -e 's/ /:/'
答案 5 :(得分:0)
这是一个仅限shell的方法: 关于第一个分隔符空间是一个制表符还是可变数量的空格并不是100%清楚,所以我只是使用echo将它们全部压缩到一个空格中
FILE="tmpfile"
OUTPUT=""
while read LINE || [ "$LINE" ]; do
LINE=`echo $LINE`
OUTPUT="${OUTPUT}${LINE/ /; }
"
done < "${FILE}"
echo "${OUTPUT}" > "${FILE}"
或者如果它实际上只是一个标签,只需:
...
while read LINE || [ "$LINE" ]; do
OUTPUT="${OUTPUT}${LINE/ /; }
"
done < "${FILE}"
...