use*_*819 2 regex linux bash sed tr
我在将空格分隔的文本文件加载到表中时遇到问题.此文本文件中的数据由teragen生成,因此,它只是虚拟数据,其中只有2列,第一列具有随机特殊字符串的值.
例:
~~~{ZRGHS|
~~~{qahVN)
我遇到一个问题,并得到被拒绝的行,因为其中一些值在它们中有一个空格作为随机ASCII字符,这使得它认为有3列,当我的表有2时,所以它们被拒绝.
所以,我想要做的只是从这些被拒绝的行中删除第一个空格,这需要在每一行上重复多次,然后尝试重新加载它们.那将是最好的解决方法,还是像tr这样的东西更合适?
谢谢!
要从行中删除第一个空格,请使用
echo "my line with spaces" | sed 's/ //'
Run Code Online (Sandbox Code Playgroud)
根据您的方法的具体情况(固定列长度?如何添加数据?),可能有更好的方法可以一步完成此操作,而不是一遍又一遍地解析被拒绝的行。
根据我的理解,你想删除除最后两个之外的所有空格.
您可以为此构建一个正则表达式,或者您可以使用以下事实:保持前n次出现非常容易:
$ echo 'one two three four' | rev | sed 's/ //2g' | rev
onetwothree four
Run Code Online (Sandbox Code Playgroud)
或者,带有文件:
rev myfile | sed 's/ //2g' | rev
Run Code Online (Sandbox Code Playgroud)或者你可以删除一个空格,直到只剩下一个空格:
$ echo 'one two three four' | sed ':a;/ .* /{s/ //;ba}'
onetwothree four
Run Code Online (Sandbox Code Playgroud)
用文件:
sed ':a;/ .* /{s/ //;ba}' myfile
Run Code Online (Sandbox Code Playgroud)或者,如果你心情愉快,你可以分割线,玩它,然后再组装(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
Run Code Online (Sandbox Code Playgroud)
用文件:
sed -r 's/(.*)([^ ]+) ([^ ]+)$/\1\n\2 \3/;h;s/\n.*//;s/ //g;G;s/\n.*\n//' myfile
Run Code Online (Sandbox Code Playgroud)