Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写单行sed命令以打印从行首开始并后跟空格的SSN_Sed - Fatal编程技术网

如何编写单行sed命令以打印从行首开始并后跟空格的SSN

如何编写单行sed命令以打印从行首开始并后跟空格的SSN,sed,Sed,因此,我试图得到唯一的SSN,开始生产线。 下面是示例数据的样子 111-11-1111 dfsfdsfsdfafdfsfdsdsfsfdfsda dsffdsdsfdfsf 222-22-2222 dfsfsdafasasdadas 333-33-3333 dsfadfasdasdfa 444-44-4444 fdfdfsfdsfs 555-55-5555 dfsfdfdffffdsdfsfdsfsd 66-66-6666 因此,只有1、4和5 SSN应该打印出来,其他什么都不打印。这在a

因此,我试图得到唯一的SSN,开始生产线。 下面是示例数据的样子

111-11-1111 dfsfdsfsdfafdfsfdsdsfsfdfsda
dsffdsdsfdfsf 222-22-2222 dfsfsdafasasdadas
 333-33-3333 dsfadfasdasdfa
444-44-4444 fdfdfsfdsfs
555-55-5555
dfsfdfdffffdsdfsfdsfsd 66-66-6666
因此,只有1、4和5 SSN应该打印出来,其他什么都不打印。这在awk甚至sed脚本中都很容易,但我需要用一行sed命令来完成(复习我在课堂上错过的一个测试问题)

我试过了

sed 's/.*\(^[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]\).*/\1/'
这让我

111-11-1111
dsffdsdsfdfsf 222-22-2222 dfsfsdafasasdadas
 333-33-3333 dsfadfasdasdfa
444-44-4444
555-55-5555
dfsfdfdffffdsdfsfdsfsd

但是,我无法删除其余的行(2,3,6)

无需使用
sed
grep
更适合提取简单数据:

grep -Eo '^[0-9]{3}-[0-9]{2}-[0-9]{4}( |$)'
但是,这包括一个尾随空间,可通过使用PCRE的lookaheads来避免:

grep -Po '^[0-9]{3}-[0-9]{2}-[0-9]{4}(?= |$)'
如果您确实想使用
sed
,以下内容应适用于BSD和最近的GNU
sed
(在较旧的GNU
sed
中,使用
-r
而不是
-E
):

它使用
-n
标志,以便在默认情况下不打印行,并在替换结束时使用
p
命令,以便打印匹配的行


我必须做
$
(匹配字符串的结尾)并替换空格以匹配第四行。

我想你应该写
3
2
4
@Kent确实,谢谢你。还将字符串的结尾作为空格的替代
sed -nE 's/^([0-9]{3}-[0-9]{3}-[0-9]{4})( |$).*/\1/p'