Grep仅在ONE LINE上搜索?

时间:2018-01-22 03:16:17

标签: bash unix grep

我正在使用Bash来查找矩阵的维度。这是我的代码,用于获取一行中的元素数量,但是它会打印出整个文件。我只需要ONE ROW中的元素数量。

1^I2^I3^I4$
5^I6^I7^I8$

以下是$ 1所指的内容:

body { 
	padding: 0;
	margin: 0;
}
a {
	text-decoration: none;
	color: gray;
}
ul, li, ol {
	list-style-type: none;
}
.logo {
	content: url("../img/logo.jpg");
	margin-top: 25px;
	margin-left: 30px;
}
.d1navwrpr {
	width: 100%;
	height: auto;
}
.navbar {
	width: 100%;
	height: auto;
	padding-bottom: 1px;
}

.navbar1 {
	width: 100%;
}

.logoimg {
	display: block;
	width: 10%;
	float: left;
}

.navbarmenu {
	width: 60%;
	display: block;
	float: left;
}

.loginbts{
	width:270px;
	float: right;
	padding: 20px 0px 30px 0;
}

.login {
	display: block;
	color:black;
	font-weight: bold;
	padding-top: 8px;
	padding-bottom: 8px;
	padding-left: 25px;
	padding-right: 25px;
	float:left;
}
.signup {
	color: white;
	font-weight: bold;
	background-color: #ff3b30;
	border-style: solid;
	border-color: #ff3b30;
	border-width: 2px;
	border-radius: 45px;
	padding-top: 8px;
	padding-bottom: 8px;
	padding-left: 25px;
	padding-right: 25px;
	float: left;
}

.pbold {
	color: black;
	font-weight: bold;
	float: left;
	padding: 30px 50px 30px 50px;
}
.navbaroption {
	padding-left: 200px;
	width: 100%;
	height: auto;
	display: none;
	position: absolute;
	padding-bottom: 20px;
	z-index: 1;	
	top: 104;
}
.navbarmenu li a:hover .navbaroption{
	display: block;
}


.navbaroption li a:hover, .navbarmenu li a:hover {
	color: #ff3b30;
}

.option1 {
	float: left;
}

.option1 li {
	padding: 5px;
	font-weight: bold;
}

.navbaroption {
	display: noe;
	background-color: white;
}

.navbarmenu li a:hover {
	display: block;
}

.mpwrpr {
	width: 100%;
	padding: 0;
	margin: 0;
}

出于某种原因,它打印出9而不是3。

提前致谢!

4 个答案:

答案 0 :(得分:2)

使用:

cat $1 | head -n 1 | sed 's/\^I/\n/g' | wc -l

我只使用head获取第一行,使用sed将每个列分隔符替换为换行符,然后将其传递给wc

答案 1 :(得分:2)

您可以在调用grep之前使用sed来隔离文件的一个特定行:

sed -n '1p' file | grep -oP "^I" | wc -l 
        ^
        ^
# will print the 1st line, 2p will print the second line etc

在你的输入上它给出了:

enter image description here

答案 2 :(得分:1)

使用awk

$ awk -F'\\^I' 'NR==1{print NF-1}' $1 
3
  • -F'\\^I'使用^I作为字段分隔符
  • NR==1仅限第一行
  • print NF-1因为问题是关于计算^I的数量,需要打印字段数减去一个

另外,如果$1是传递给shell脚本的参数,请使用"$1"作为良好做法


并猜测,这是OP正在使用的实际数据

$ cat ip.txt
1   2   3   4
5   6   7   8
$ cat -A ip.txt
1^I2^I3^I4$
5^I6^I7^I8$
$ # exit to avoid unnecessary processing of other lines
$ awk -F'\t' 'NR==1{print NF-1; exit}' ip.txt
3

答案 3 :(得分:1)

sed 's:\^I:\n:g; q' | wc -l
         ^       ^
         |_______|_______ change all ^I to \n
                 |_______ quit after first line