我有一个像这样的vlsi代码。
instance1/instance2/instance3/and_gate_inst/and_gate/a_pin
instance1/instance2/or_gate/b_pin
现在你能帮我得到如下所示的东西吗:
instance1/instance2/instance3/and_gate_inst/and_gate
instance1/instance2/or_gate
抱歉造成混乱,以上是正确的问题......
答案1
您似乎想要获取包含其路径存储在这些行中的文件的目录的路径。
已经给出了涵盖基本情况的答案,但是我将提到在一般情况下值得考虑的几点:
在大多数 Unices 上,文件路径可以由除 0 之外的任何字节序列组成。其中包括用于表示换行符的字节。这可以包括不形成有效字符的字节序列,该序列可以长于
LINE_MAX
(标准常量(但其值由每个实现自行决定),该常量定义文本行可能具有的最大字节数,如果您愿意的话)以保证文本实用程序能够在它们上正常工作)。因此,这里输入格式无法表示任何文件路径列表(例如包含换行符的文件路径列表),即使对于没有换行符且低于 LINE_MAX 字节的文件路径列表,您也需要在 C 语言环境中运行文本实用程序确保它们可以处理任意字节值。
/
是路径组成部分分隔符,但是/
alone 比较特殊,代表根目录文件。没有目录包含该文件,尽管按照惯例我们通常说它的父目录是它本身。无论如何,如果它可能出现在输入中,您将需要对其进行特殊处理。- 多个
/
行为相似的序列,foo//bar
与 相同foo/bar
。 - 除了在开始时正好有两个 的序列
//
。其中///foo
与 相同/foo
,但//foo
不保证与 相同/foo
(在某些系统上并非如此)。更一般地说,对于以 . 开头的文件的一般情况,我们无法得知太多//
。例如,每个/
分隔组件甚至可能不是目录,所以在这种情况下,很难决定该怎么做。
foo
也是相对路径。它的父目录.
不是空字符串。.
并且..
是比实际文件更多的目录遍历工具。但他们参考到实际文件。那么,我们应该为它们的目录名或父目录报告什么(..
和../..
分别?或者.
像其他/
-less相对路径一样?)。foo/bar/
或者foo/bar//
至少foo/bar
只要foo/bar
它本身是一个目录,那么它的父目录应该是foo
.
少一个驯服的输入可以是:
//foo/bar
///foo//bar//
foo
foo//
.
../
foo<0x80>bar/baz<0x81>
--foo
/
//
///
解决问题的一种方法是服从命令dirname
,在没有明显的决定的情况下接受其决定。
可移植的困难部分是从基于行的输入获取参数dirname
。
在 GNU 系统上,可以通过以下方式完成:
xargs -rd '\n' -a your-file dirname --
GNU dirname
8.30 给出:
//foo
///foo
.
.
.
.
foo<0x80>bar
.
/
/
/
但不适用于大多数其他系统,因为:
-d
、-r
和-a
/或非标准 GNUxargs
扩展- 一些
xargs
实现因非文本输入而卡住 dirname
不需要接受多个参数(很少有人这样做)。
对于长于所执行命令的最大大小参数的文件路径,它仍然可能失败。
答案2
sed 's|/[^/]*$||'
在哪里
/
匹配字面意思/
[^/]*
匹配零个或多个非/
字符$
匹配行尾
答案3
要获得所需的输出,awk
您可以使用以下命令:
awk -F'/' '{print $1"/"$2}' <file_name>
该-F'/'
选项将“/”定义为列分隔符。 print $1"/"$2 打印第一列,连接“/”并打印第二列。
您还可以通过剪切实现所需的输出。
cut -d'/' -f1,2 <file_name>
答案4
谢谢大家,
终于这成功了。
awk -F "/" '{$NF=""; print $0}' instance1/instance2/instance3/and_gate_inst/and_gate/a_pin | sed 's/ /\//g' | sed 's/\/$//'
awk -F "/" '{$NF=""; print $0}' instance1/instance2/or_gate/b_pin | sed 's/ /\//g' | sed 's/\/$//'