我在将空格分隔的文本文件加载到表中时遇到问题。此文本文件中的数据由teragen生成,因此只是虚拟数据,其中只有2列,第一列具有随机特殊字符串的值。
示例:
~~~{ZRGHS|
~~~{qahVN)
我遇到了一个问题并被拒绝了行,因为其中一些值中有一个空格作为随机ASCII字符,这使得它认为有3列,当我的表有2时,所以它们被拒绝了。
所以,我想要做的只是从这些被拒绝的行中删除第一个空格,这些行需要在每一行上重复多次,然后尝试重新加载它们。那将是最好的解决方法,还是像tr这样的东西会更合适?
谢谢!
答案 0 :(得分:5)
根据我的理解,你想删除除最后两个之外的所有空格。
您可以为此构建一个正则表达式,或者您可以使用以下事实:首先发生
$ echo 'one two three four' | rev | sed 's/ //2g' | rev
onetwothree four
或者,使用文件:
rev myfile | sed 's/ //2g' | rev
或者您可以删除一个空格,直到只剩下一个空格:
$ echo 'one two three four' | sed ':a;/ .* /{s/ //;ba}'
onetwothree four
带文件:
sed ':a;/ .* /{s/ //;ba}' myfile
或者,如果你心情愉快,你可以分割线,玩它,然后再组装(GNU sed假设):
$ echo 'one two three four' | sed -r 's/(.*)([^ ]+) ([^ ]+)$/\1\n\2 \3/;h;s/\n.*//;s/ //g;G;s/\n.*\n//'
onetwothree four
带文件:
sed -r 's/(.*)([^ ]+) ([^ ]+)$/\1\n\2 \3/;h;s/\n.*//;s/ //g;G;s/\n.*\n//' myfile
答案 1 :(得分:3)
要从一行中删除第一个空格,请使用
echo "my line with spaces" | sed 's/ //'
根据您的方法的具体情况(固定列长度?您如何添加数据?),可能有更好的方法在一步中执行此操作,而不是一遍又一遍地解析被拒绝的行。
答案 2 :(得分:0)
从字符串中删除/删除第一个字符:
function stringStripStart {
echo ${1:1:${#1}}
}
与删除traling字符类似:
function stringStripEnd {
FINAL_LEN=${#1}-1
echo ${1:0:$FINAL_LEN}
}
注意:对于空字符串,需要添加一些额外的条件。