从第一个字符提取字符串直到字符串模式

从第一个字符提取字符串直到字符串模式

**$&*#@**我有一个带有字段分隔符和**$#@&***记录分隔符的隐式文件。下面是一个例子,

100$&*#@200$&*#@50$&*#@Some String$&*#@2016-01-01 101010$#@&*101$&*#@210$&*#@51$&*#@Some String$&*#@2016-02-02 101010$#@&*102$&*#@220$&*#@55$&*#@Some String$&*#@2016-03-03 101010$#@&*

我需要一些命令从上面的文件中提取第一行以进行数据验证。

请注意,在这种情况下wc -l返回零,因为它是连续流(隐式文件),因此我不能使用 head -1。

此外,我必须提取每个字段并进行验证,以确保前三个字段是整数,并且特定数字字段是具有特定格式的时间戳。

答案1

我使用了一个名为 的变量string来存储您的示例。下面sed应该将您分成string几行,并用 分隔字段:。您可以通过管道将其输入 ahead -1以获得第一行:

 echo $string | sed 's/'"$#@&\*"'/\n/g'| sed 's/'"$&\*#@"'/:/g'

然后您可以使用cut获取每行的前三个字段并验证它们是否仅为数字。测试第一个字段的示例:

field1="$(echo $new_string | cut -d: -f1 | head -1)"
if [ "$field1" -eq "$field1" ] 2>/dev/null; then
  echo "Integer.
else
  echo "Not integer."
fi

您可以使用循环解析和验证所有值。测试日期可能更复杂但可行,可能使用正则表达式等。

相关内容