![将逗号替换为冒号并将所有值移至一行](https://linux22.com/image/1076642/%E5%B0%86%E9%80%97%E5%8F%B7%E6%9B%BF%E6%8D%A2%E4%B8%BA%E5%86%92%E5%8F%B7%E5%B9%B6%E5%B0%86%E6%89%80%E6%9C%89%E5%80%BC%E7%A7%BB%E8%87%B3%E4%B8%80%E8%A1%8C.png)
我在 Calc 中输入了一个数字列表并将其保存为 CSV,以便一行上的所有值都用逗号分隔。我将在以下示例中描述我使用 bash 寻找的内容:
输入
22,33
45,533
输出
22:33,45:533
答案1
不确定我是否理解正确,但对于您显示的输入和输出,以下sed
命令可以进行转换,同时考虑到您的输入文件包含 CR-LF 行终止符:
sed 's/,/:/g;s/ /,/g' <<<$(tr -d '\r' <input_file) | tee output_file.tmp
mv output_file.tmp input_file
答案2
无需外部二进制文件的解决方案 - 但速度较慢(逐行读取并更改',' → ':')
while read -u 3 -r line; do
echo -n "${line/,/:}," >> new_file
done 3< old_file
答案3
效率低下,但肯定有效:
在 gedit 中打开文件。按Ctrl+ H。在查找中输入,
,在替换中输入:
。然后选择全部替换。
接下来,再次打开“查找和替换”屏幕。在“查找”框中键入内容,\n
并将“替换”框留空。然后选择“全部替换”。
就是这样 :)
答案4
这有效:
cat test| sed s/,/:/g | sed s/$/,/g | xargs
但产生:
22:33, 45:533,
因此,您可能必须使用这个更长的版本才能获得您要求的精确结果:
cat test| sed s/,/:/g | sed s/$/,/g | xargs | sed "s/, /,/g"
我很确定使用 sed/awk 有更好的方法可以做到这一点,尽管这确实实现了您的要求并且非常容易阅读。