GB *_*ran -2 sed awk text-processing
我有一个像这样的 vlsi 代码。
instance1/instance2/instance3/and_gate_inst/and_gate/a_pin
instance1/instance2/or_gate/b_pin
Run Code Online (Sandbox Code Playgroud)
现在你能帮我得到如下内容吗?
instance1/instance2/instance3/and_gate_inst/and_gate
instance1/instance2/or_gate
Run Code Online (Sandbox Code Playgroud)
抱歉造成混乱,以上是正确的问题...
您似乎想要获取包含路径存储在这些行中的文件的目录的路径。
已经给出了涵盖基本情况的答案,但是我将提到在一般情况下值得考虑的几点:
在大多数 Unices 上,文件路径可以由除 0 以外的任何字节序列组成。这包括用于表示换行符的字节。这可以包括不形成有效字符的字节序列,它可以长于LINE_MAX(标准常量(但其值由每个实现自行决定)定义文本行可能具有的最大字节数(如果需要)以保证文本实用程序将在它们上正常工作)。
因此,这里的输入格式无法表达任何文件路径列表(例如包含换行符的文件路径),即使对于没有换行符且小于 LINE_MAX 字节的文件路径列表,您也需要在 C 语言环境中运行文本实用程序以确保它们可以处理任意字节值。
/ 是路径组件分隔符,但是
/单独是特殊的,代表根目录文件。没有包含该文件的目录,尽管按照惯例我们通常说它的父目录是它本身。在任何情况下,如果它可能出现在输入中,您必须特别对待它。/就像一个一样,foo//bar是一样的foo/bar。//. Where///foo与 相同/foo,但//foo不保证与 相同/foo(在某些系统上并非如此)。更一般地说,对于以//. 例如,每个/分隔的组件甚至可能不是目录,因此在这种情况下,很难决定要做什么。foo也是相对路径。它的父目录.不是空字符串。
.并且..是比实际文件更多的目录遍历工具。但它们指的是实际文件。那么,我们应该怎样汇报他们的目录名称或父目录(..和../..分别吗?还是.像其他/稀少相对路径?)。
foo/bar/或者foo/bar//是AME的foo/bar至少只要foo/bar本身是一个目录,所以它的父目录应该是foo。
不太驯服的输入可能是:
//foo/bar
///foo//bar//
foo
foo//
.
../
foo<0x80>bar/baz<0x81>
--foo
/
//
///
Run Code Online (Sandbox Code Playgroud)
解决问题的一种方法是服从dirname命令,当没有一个明显的决定时,接受它的决定。
可移植的困难部分是从基于行的输入获取到 的参数dirname。
在 GNU 系统上,这可以通过以下方式完成:
xargs -rd '\n' -a your-file dirname --
Run Code Online (Sandbox Code Playgroud)
GNU dirname8.30 给出了:
//foo
///foo
.
.
.
.
foo<0x80>bar
.
/
/
/
Run Code Online (Sandbox Code Playgroud)
但不适用于大多数其他系统,因为:
-d,-r和/-a或非标准的 GNUxargs扩展xargs实现阻塞了非文本输入dirname 不需要接受一个以上的参数(很少有)。对于长于执行命令的最大大小参数的文件路径,它仍然可能失败。